1.uberԴ?源码?
2.Hudi 基础入门篇
3.出行类APP开发外包公司开发类似滴滴打车APP功能有那些?
4.详解interface中类型断言的实现原理
5.优步Uber承认遭遇黑客攻击,目前受损程度调查进展如何?
6.OpenTelemetryãSpring Cloud SleuthãKafkaãJagerå®ç°åå¸å¼è·è¸ª
uberԴ?源码?
上篇介绍了 Mapbox Studio 2D 地图教程的受欢迎程度后,现在我们将深入探讨 3D 地图制作。源码无论是源码初学者还是高手,本文都将为你的源码项目带来灵感。让我们从几个启发性的源码外汇通道源码案例开始,了解如何利用 Mapbox 创作3D地图:
1. 数据可视化与3D地图:荷兰的源码年通勤动态图,通过Mapbox GL JS的源码custom layer API和着色器技术,呈现了半透明的源码时空效果,将通勤数据转化为艺术展示。源码源码分享,源码适合进一步分析,源码点击链接了解详情。源码
2. 点云与3D地图:使用Mapbox与Uber的源码deck.gl工具,将倾斜摄影数据呈现得直观且互动。源码点击链接查看在线演示。
3D地图制作方式多样:从伪3D展示到Three.js展示gltf格式模型,甚至使用custom layer API实现巴黎圣母院在地图上的重现。通过开源精神,Mapbox的灵活性取决于与之兼容的处理库。
想尝试自己动手制作?这里有教程视频和示例代码,例如,将3D模型添加到地图,通过extrusions功能创建3D建筑效果,以及利用Deck.gl展示LIDAR数据。一步步教你实现,点击链接获取视频教程。
对3D导航游戏或Unity应用感兴趣的开发者,Maps SDK for Unity提供了丰富的3D地图案例。例如,模拟城市、3D建筑数据可视化等,适合深入探索。《结界都市Return》等作品就展现了其潜力。
最后,不容错过的还有Mapbox 3D地图设计大赛中的优秀作品,如《富有质感的3D城市版图》和《权利的游戏3D故事导览》。这些作品展示了Mapbox的源码打包war强大功能和创意可能性。
如果你想了解更多,别忘了关注我们的微信公众号,获取更多技术内容和教程。感谢你阅读至此,如果觉得有价值,请分享给你的朋友们!
Hudi 基础入门篇
探索Hudi:Apache大数据湖的革新之作 Hudi,由Uber技术先驱者打造并在年开源,自那时起,它凭借其强大的数据处理能力与卓越的可扩展性,一路晋升为Apache顶级项目,如今最新版本已是0.9.0。Hudi的诞生标志着对实时数据湖处理的革新,它最初支持Spark的数据摄入,而后在0.7.0版本中与Flink无缝融合,提供了Flink SQL CDC功能,满足了日益增长的实时数据处理需求。 从年O'reilly文章中提出的增量处理核心思想,Hudi迅速成长,于年由Uber创建并扩展至所有关键业务场景。年开源后,它开始承载Uber庞大的PB数据湖,同年吸引了大量用户,随着云计算的普及,Hudi的影响力与日俱增。年,Hudi进入Apache孵化器,随后的年,社区发展与采用率暴增,标志着Hudi在大数据领域的显著突破。 进入年,Hudi的版图进一步扩大,支持PB数据湖的处理,不仅提供了SQL DML操作,还强化了与Flink的集成,实现了分钟级的实时性,满足了业务对准实时数仓的相互宝源码严苛要求。Hudi的湖仓一体架构让实时处理与批处理无缝对接,数据一致性、计算引擎和存储统一,为数据处理带来了前所未有的效率和灵活性。 快速入门Hudi 要体验Hudi的魅力,首先确保大数据环境的准备。从Maven的安装开始,下载0.9.0源码包,然后添加Maven镜像以优化依赖下载。将Hudi源码解压并编译,最后通过Hudi CLI进行验证,确保一切顺利。 Hudi的平台架构是基于HDFS存储和Spark操作的,所以安装HDFS是必不可少的。这包括解压软件、配置环境变量、设置Hadoop和HDFS相关配置,以及格式化和启动集群。完成后,可以通过HDFS Web UI来监控和管理数据。 在国内众多企业中,Hudi已成为构建数据湖和大数据仓库的核心组件,助力企业实现数据湖与仓库的高效整合,打造湖仓一体化的现代化数据处理平台。 深入学习资源 想深入了解Hudi?可以参考黑马程序员的大数据数据湖架构Hudi视频教程,从基础概念到实战项目,涵盖HDFS、Spark、Flink、Hive等关键技术,让你从零开始,逐步领略Hudi的强大功能。出行类APP开发外包公司开发类似滴滴打车APP功能有那些?
安达出行是专业一站式网约车解决方案(www.andacx.com/solutions?tab=3)提供商,涵盖打车app开发、网约车平台开发,网约车监管平台对接、网约车牌照申请、美食云源码物流货运软件开发等服务。这里以安达出行的打车app开发软件为例,打车app功能主要有以下:乘客端:手机登录、下单用车、支付评价、查看轨迹、充值、优惠券、参与活动。
司机端:出车收车、接单抢单、实时计费、收款提现、语音播报、考核统计等。
管理后台:乘客司机车辆管理、订单管理、实时监控调度、运营功能配置、营销活动管理、财务管理、数据统计等。
详解interface中类型断言的实现原理
哈喽,everyBody,我是asong,今天我们一起来探索一下interface的类型断言是如何实现的。我们通常使用interface有两种方式,一种是带方法的interface,一种是空的interface。因为Go中是没有泛型,所以我们可以用空的interface{ }来作为一种伪泛型使用,当我们使用到空的interface{ }作为入参或返回值时,就会使用到类型断言,来获取我们所需要的类型,所以平常我们会在代码中看到大量的类型断言使用,你就不好奇它是怎么实现的嘛?你就不好奇它的性能损耗是多少嘛?反正我很好奇,略~。欢乐斗牌源码
Type Assertion(断言)是用于interface value的一种操作,语法是x.(T),x是interface type的表达式,而T是asserted type,被断言的类型。举个例子看一下基本使用:
上面我们声明了一个接口对象demo,通过类型断言的方式断言一个接口对象demo是不是nil,并判断接口对象demo存储的值的类型是T,如果断言成功,就会返回值给str,如果断言失败,就会触发panic。这段代码加上如果这样写,就会触发panic:
所以为了安全起见,我们还可以这样使用:
这里使用的表达式是t,ok:=i.(T),这个表达式也是可以断言一个接口对象(i)里不是nil,并且接口对象(i)存储的值的类型是 T,如果断言成功,就会返回其类型给t,并且此时 ok 的值 为true,表示断言成功。如果接口值的类型,并不是我们所断言的 T,就会断言失败,但和第一种表达式不同的是这个不会触发 panic,而是将 ok 的值设为false,表示断言失败,此时t为T的零值。所以推荐使用这种方式,可以保证代码的健壮性。
如果我们想要区分多种类型,可以使用type switch断言,使用这种方法就不需要我们按上面的方式去一个一个的进行类型断言了,更简单,更高效。上面的代码我们可以改成这样:
type switch的一个典型应用是在go.uber.org/zap库中的zap.Any()方法,里面就用到了类型断言,把所有的类型的case都列举出来了,default分支使用的是Reflect,也就是当所有类型都不匹配时使用反射获取相应的值,具体大家可以去看一下源码。
接下来我们来看一下类型断言实现源码剖析:
非空接口和空接口都可以使用类型断言,我们分两种进行剖析。
空接口:
我们先来写一段测试代码:
老样子,我们将上述代码转换成汇编代码看一下:
截取部分重要汇编代码如下:
上面这段汇编代码的作用就是赋值给空接口,数据都存在栈上,因为空interface{ }的结构是eface,所以就是组装了一个eface在内存中,内存布局如下:
我们知道空接口的数据结构中只有两个字段,一个_type字段,一个data字段,从上图中,我们可以看出来,eface的_type存储在内存的+(SP)处,unsafe.Pointer存在了+(SP)处,现在我们知道了他是怎么存的了,接下来我们看一下空接口的类型断言汇编是怎么实现的:
从上面这段汇编我们可以看出来,空接口的类型断言是通过判断eface中的_type字段和比较的类型进行对比,相同就会去准备接下来的返回值,如果类型断言正确,经过中间临时变量的传递,最终val保存在内存中+(SP)处。ok保存在内存+(SP)处。
如果断言失败,就会清空AX和CX寄存器,因为AX和CX中存的是eface结构体里面的字段。
最后总结一下空接口类型断言实现流程:空接口类型断言实质是将eface中_type与要匹配的类型进行对比,匹配成功在内存中组装返回值,匹配失败直接清空寄存器,返回默认值。
非空接口:
老样子,还是先写一个例子,然后我们在看他的汇编实现:
使用汇编指令看一下他的汇编代码如下:
上面这段汇编代码作用就是赋值给非空接口的iface结构,组装了iface的内存布局,因为上面分析了非空接口的,这里就不细讲了,理解他的意思就好。接下来我们看一下他是如何进行类型断言的。
上面代码我们可以看到调用iface结构中的itab字段,这里为什么这么调用呢?因为我们类型推断的是一个具体的类型,编译器会直接构造出iface,不会去调用已经在runtime/iface.go实现好的断言方法。上述代码中,先构造出iface,其中*itab存在内存 +(SP)中,unsafe.Pointer 存在 +(SP) 中。然后在类型推断的时候又重新构造了一遍 *itab,最后将新的 *itab 和前一次 +(SP) 里的*itab 进行对比。
后面的赋值操作也就不再细说了,没有什么特别的。
这里还有一个要注意的问题,如果我们类型断言的是接口类型,那么我们在就会看到这样的汇编代码:
我们可以看到,直接调用的是runtime.assertI2I2()方法进行类型断言,这个方法的实现代码如下:
上述代码逻辑很简单,如果iface 中的itab.inter 和第一个入参 *interfacetype 相同,说明类型相同,直接返回入参 iface的相同类型,布尔值为 true;如果iface 中的itab.inter 和第一个入参 *interfacetype 不相同,则重新根据 *interfacetype 和 iface.tab 去构造tab。构造的过程会查找itabTable。如果类型不匹配,或者不是属于同一个 interface类型,都会失败。getitab()方法第三个参数是 canfail,这里传入了true,表示构建 *itab允许失败,失败以后返回 nil。
差异:如果我们断言的类型是具体类型,编译器会直接构造出iface,不会去调用已经在runtime/iface.go实现好的断言方法。如果我们断言的类型是接口类型,将会去调用相应的断言方法进行判断。
小结:非空接口类型断言的实质是 iface 中 *itab 的对比。*itab 匹配成功会在内存中组装返回值。匹配失败直接清空寄存器,返回默认值。
类型断言的性能损耗:
前面我们已经分析了断言的底层原理,下面我们来看一下不同场景下进行断言的代价。
针对不同的场景可以写出测试文件如下(截取了部分代码,全部代码获取 戳这里):
运行结果:
从结果我们可以分析一下:
好啦,现在我们也知道怎样使用类型断言能提高性能啦,又可以和同事吹水一手啦。
总结:
好啦,本文到这里就已经接近尾声了,在最后做一个小小的总结:
文中代码已上传github: github.com/asong/Go...,欢迎star
推荐往期文章:
优步Uber承认遭遇黑客攻击,目前受损程度调查进展如何?
根据初步调查了解,黑客疑似通过一位Uber员工的账户进入内网,访问了多个平台高等级特权的安全账户,并且获取了Uber数据库和源代码,导致多个Uber关键系统被入侵,黑客甚至在数据关闭前还下载了所有漏洞报告,这对于该公司的确造成了巨大的安全危机,此事发生之后官方也第一时间关闭了所有的程序,暂无证据表明敏感用户数据泄露,详细内容还处于调查阶段,具体怎么回事我们暂时也不是很了解,这不是Uber首次遭遇黑客攻击,看来Uber的确应该重新审视公司的内部安全系统,以免用户的信息遭遇泄露。优步Uber承认遭遇黑客攻击,此事曝光后引起了很多人的关注,看到这个消息后,很多用户得知这个消息后都表示非常担忧,担心自己的个人信息会被泄露,这已经严重侵犯到用户的个人饮食,对于Uber来说也造成了巨大的威胁,大家也很想知道目前受损程度调查进展如何,公司的内部员工回应此事正在调查该事件,没有证据表明其平台存在固有的漏洞。
目前可以确定的是黑客是通过Uber员工的账户进入内网,从而入侵了公司的内部系统,黑客还公然给员工发布入侵公司内部系统的通知,可见对方根本就不担心被人发现,也不知道是不是对于自己的太过自信,所以根本不担心会留下任何的蛛丝马迹。
这就是当地警方所掌握的信息,相关受损程度也还在进一步进行核实,如今没有证据表明敏感用户数据泄露就已经最好的消息,这一时半会想要追查到黑客的下落估计很难,一切还是等官方的公布的数据为准。
OpenTelemetryãSpring Cloud SleuthãKafkaãJagerå®ç°åå¸å¼è·è¸ª
åå¸å¼è·è¸ªå¯è®©æ¨æ·±å ¥äºè§£ç¹å®æå¡å¨åå¸å¼è½¯ä»¶ç³»ç»ä¸ä½ä¸ºæ´ä½çä¸é¨åæ¯å¦ä½æ§è¡çãå®è·è¸ªåè®°å½ä»èµ·ç¹å°ç®çå°ç请æ±ä»¥åå®ä»¬ç»è¿çç³»ç»ãå¨æ¬æä¸ï¼æ们å°ä½¿ç¨ OpenTelemetryãSpring Cloud SleuthãKafka å Jaeger å¨ä¸ä¸ª Spring Boot å¾®æå¡ ä¸å®ç°åå¸å¼è·è¸ªã
æ们å æ¥ççåå¸å¼è¿½è¸ªä¸çä¸äºåºæ¬æ¯è¯ã
跨度ï¼è¡¨ç¤ºç³»ç»å çå个工ä½åå ã跨度å¯ä»¥ç¸äºåµå¥ä»¥æ¨¡æå·¥ä½çå解ãä¾å¦ï¼ä¸ä¸ªè·¨åº¦å¯è½æ£å¨è°ç¨ä¸ä¸ª REST 端ç¹ï¼ç¶åå¦ä¸ä¸ªå跨度å¯è½æ¯è¯¥ç«¯ç¹è°ç¨å¦ä¸ä¸ªï¼ççå¨ä¸åçæå¡ä¸ã
Traceï¼ææå ±äº«ç¸åæ ¹è·¨åº¦ç跨度éåï¼æè æ´ç®åå°è¯´ï¼å°ææ跨度å建为åå§è¯·æ±çç´æ¥ç»æã跨度çå±æ¬¡ç»æï¼æ¯ä¸ªè·¨åº¦å¨æ ¹è·¨åº¦æè¾¹é½æèªå·±çç¶è·¨åº¦ï¼å¯ç¨äºå½¢ææåæ ç¯å¾ï¼æ¾ç¤ºè¯·æ±å¨éè¿åç§ç»ä»¶æ¶çè·¯å¾ã
OpenTelemetry ï¼ä¹ç®ç§°ä¸º OTelï¼æ¯ä¸ä¸ªä¾åºåä¸ç«çå¼æº Observability æ¡æ¶ï¼ç¨äºæ£æµãçæãæ¶éå导åºé¥æµæ°æ®ï¼ä¾å¦ è·è¸ª ã ææ å æ¥å¿ ãä½ä¸º äºåç 计ç®åºéä¼ (CNCF) çåµå项ç®ï¼OTel æ¨å¨æä¾ä¸ä¾åºåæ å ³çç»ä¸åºå API éââ主è¦ç¨äºæ¶éæ°æ®å¹¶å°å ¶ä¼ è¾å°æå¤ãOTel æ£å¨æ为çæå管çé¥æµæ°æ®çä¸çæ åï¼å¹¶è¢«å¹¿æ³éç¨ã
Sleuth æ¯ä¸ä¸ªç± Spring Cloud å¢é管çåç»´æ¤ç项ç®ï¼æ¨å¨å°åå¸å¼è·è¸ªåè½éæå° Spring Boot åºç¨ç¨åºä¸ãå®ä½ä¸ºä¸ä¸ªå ¸åSpring Starterç . 以ä¸æ¯ä¸äºå¼ç®±å³ç¨ç Sleuth å·¥å ·ï¼
Sleuth æ·»å äºä¸ä¸ªæ¦æªå¨ï¼ä»¥ç¡®ä¿å¨è¯·æ±ä¸ä¼ éææè·è¸ªä¿¡æ¯ãæ¯æ¬¡è°ç¨æ¶ï¼é½ä¼å建ä¸ä¸ªæ°ç Spanãå®å¨æ¶å°ååºåå ³éã
Sleuth è½å¤è·è¸ªæ¨ç请æ±åæ¶æ¯ï¼ä»¥ä¾¿æ¨å¯ä»¥å°è¯¥éä¿¡ä¸ç¸åºçæ¥å¿æ¡ç®ç¸å ³èãæ¨è¿å¯ä»¥å°è·è¸ªä¿¡æ¯å¯¼åºå°å¤é¨ç³»ç»ä»¥å¯è§å延è¿ã
Jaeger æåç± Uber çå¢éæ建ï¼ç¶åäº å¹´å¼æºãå®äº 年被æ¥å为äºåçåµå项ç®ï¼å¹¶äº å¹´æ¯ä¸ãä½ä¸º CNCF çä¸é¨åï¼Jaeger æ¯äºåç æ¶æ ä¸å ¬è®¤ç项ç®ãå®çæºä»£ç 主è¦æ¯ç¨ Go ç¼åçãJaeger çæ¶æå æ¬ï¼
ä¸ Jaeger 类似ï¼Zipkin å¨å ¶æ¶æä¸ä¹æä¾äºç¸åçç»ä»¶éã尽管 Zipkin æ¯ä¸ä¸ªè¾èç项ç®ï¼ä½ Jaeger å ·ææ´ç°ä»£åå¯æ©å±ç设计ã对äºæ¤ç¤ºä¾ï¼æ们éæ© Jaeger ä½ä¸ºå端ã
让æ们设计ä¸ä¸ª Spring Boot å¾®æå¡ï¼
è¿ä¸ä¸ªå¾®æå¡æ¨å¨ï¼
è¿æ¯ä¸ºäºè§å¯ OpenTelemetry å¦ä½ç»å Spring Cloud Sleuth å¤ç代ç çèªå¨æ£æµä»¥åçæåä¼ è¾è·è¸ªæ°æ®ãä¸é¢çè线æè·äºå¾®æå¡å¯¼åºçè·è¸ªæ°æ®çè·¯å¾ï¼éè¿OTLPï¼OpenTelemetry Protocolï¼ä¼ è¾å°OpenTelemetry Collectorï¼æ¶éå¨ä¾æ¬¡å¤ç并å°è·è¸ªæ°æ®å¯¼åºå°å端Jaegerè¿è¡åå¨åæ¥è¯¢ã
ä½¿ç¨ monorepoï¼æ们ç项ç®ç»æå¦ä¸ï¼
第 1 æ¥ï¼æ·»å POM ä¾èµé¡¹
è¿æ¯ä½¿ç¨ OTel å Spring Cloud Sleuth å®ç°åå¸å¼è·è¸ªçå ³é®ãæ们çç®æ æ¯ä¸å¿ æå¨æ£æµæ们ç代ç ï¼å æ¤æ们ä¾é è¿äºä¾èµé¡¹æ¥å®æå®ä»¬è®¾è®¡çå·¥ä½ââèªå¨æ£æµæ们ç代ç ï¼é¤äºè·è¸ªå®ç°ãå°é¥æµæ°æ®å¯¼åºå° OTel æ¶éå¨çã
第 2 æ¥ï¼OpenTelemetry é ç½®
OpenTelemetry æ¶éå¨ç«¯ç¹
对äºæ¯ä¸ªå¾®æå¡ï¼æ们éè¦å¨å ¶ä¸æ·»å 以ä¸é ç½®application.ymlï¼è¯·åé ä¸é¢é¨åä¸ç示ä¾ç段ï¼ãspring.sleuth.otel.exporter.otlp.endpoint主è¦æ¯é ç½®OTel Collector端ç¹ãå®åè¯å¯¼åºå¨ï¼å¨æ们çä¾åä¸æ¯ Sleuthï¼éè¿ OTLP å°è·è¸ªæ°æ®åéå°æå®çæ¶éå¨ç«¯ç¹pose æå¡ã
è·è¸ªæ°æ®æ¦çæ½æ ·
spring.sleuth.otel.config.trace-id-ratio-basedå±æ§å®ä¹äºè·è¸ªæ°æ®çéæ ·æ¦çãå®æ ¹æ®æä¾ç»éæ ·å¨çåæ°å¯¹ä¸é¨å迹线è¿è¡éæ ·ãæ¦çæ½æ ·å 许 OpenTelemetry è·è¸ªç¨æ·éè¿ä½¿ç¨éæºæ½æ ·ææ¯éä½è·¨åº¦æ¶éææ¬ãå¦æ该æ¯çå°äº 1.0ï¼åæäºè¿¹çº¿å°ä¸ä¼è¢«å¯¼åºã对äºæ¤ç¤ºä¾ï¼æ们å°éæ ·é 置为 1.0ã%ã
æå ³å ¶ä» OTel Spring Cloud Sleuth å±æ§ï¼è¯·åé 常è§åºç¨ç¨åºå±æ§ã
OpenTelemetry é ç½®æ件
æ们éè¦é¡¹ç®æ ¹ç®å½ä¸ç OTel é ç½®æ件otel-config.yamlãå 容å¦ä¸ãæ¤é ç½®æ件å®ä¹äº OTel æ¥æ¶å¨ãå¤çå¨å导åºå¨çè¡ä¸ºãæ£å¦æ们æçå°çï¼æ们å®ä¹äºæ们çæ¥æ¶å¨æ¥çå¬ gRPC å HTTPï¼å¤çå¨ä½¿ç¨æ¹å¤çå导åºå¨ä½ä¸º jaeger åæ¥å¿è®°å½ã
第 3 æ¥ï¼docker-compose å°ææå 容串å¨ä¸èµ·
让æ们ççæ们éè¦å¯å¨åªäº docker 容å¨æ¥è¿è¡è¿ä¸ä¸ªå¾®æå¡å¹¶è§å¯å®ä»¬çåå¸å¼è·è¸ªï¼åä¸ä¸ªå¾®æå¡å¨ä¸é¢çé¨åä¸è¿è¡äºè§£éã
è¿è¡docker-compose up -d以è°åºææä¹ä¸ªå®¹å¨ï¼
第 4 æ¥ï¼è¿½è¸ªæ°æ®å¨è¡å¨
å¿«ä¹ä¹è·¯
ç°å¨ï¼è®©æ们å¯å¨customer-service-bffæµç¨çå ¥å£ç¹ï¼ä»¥å建æ°å®¢æ·ã
å¯å¨ Jaeger UIï¼ /?target=http%3A//localhost%3A/%2C]æ[/url]æå¡æç´¢customer-service-bffï¼åå»Find Tracesæé®ï¼è¿æ¯æ们çå°çå建客æ·è·è¸ªï¼å®è·¨è¶ä¸ä¸ªæå¡ï¼æ»å ±è·¨è¶å 个ï¼æç»æ¶é´ . 毫ç§ã
é¤äº Trace Timeline è§å¾ï¼ä¸é¢çå±å¹æªå¾ï¼ï¼Jaeger è¿æä¾äºä¸ä¸ªå¾å½¢è§å¾ï¼Trace Graphå¨å³ä¸è§çä¸æèåä¸éæ©ï¼ï¼
ä¸ä¸ªå¾®æå¡å¨ docker ä¸çæ¥å¿è¾åºæ¾ç¤ºç¸åçè·è¸ª idï¼ä»¥çº¢è²çªåºæ¾ç¤ºï¼å¹¶æ ¹æ®å ¶åºç¨ç¨åºå称æ¾ç¤ºä¸åç跨度 idï¼åºç¨ç¨åºå称åå ¶å¯¹åºç跨度 id 以å¹é çé¢è²çªåºæ¾ç¤ºï¼ãå¨ çæ åµä¸customer-serviceï¼ç¸åç span id ä» REST API 请æ±ä¼ éå° Kafka åå¸è 请æ±ã
customer-service让æä»¬å¨ docker ä¸æåæ们çPostgreSQL æ°æ®åºï¼ç¶åéå¤ä»customer-service-bff. internal server erroræ£å¦é¢æçé£æ ·ï¼æ们å¾å°äºãæ£æ¥ Jaegerï¼æ们çå°ä»¥ä¸è·è¸ªï¼å¼å¸¸å æ è·è¸ªæ±æ¨SocketTimeoutExceptionï¼å次å¦é¢æçé£æ ·ã
è¯å«é¿æè¿è¡ç跨度
Jaeger UI å 许æ们æç´¢è¶ è¿æå®æ大æç»æ¶é´çè·è¸ªãä¾å¦ï¼æ们å¯ä»¥æç´¢ææèæ¶è¶ è¿ æ¯«ç§çè·è¸ªãç¶åï¼æ们å¯ä»¥æ·±å ¥ç 究é¿æè¿è¡çè·è¸ªä»¥è°æ¥å ¶æ ¹æ¬åå ã
å¨è¿ä¸ªæ äºä¸ï¼æä»¬ä» OpenTelemetryãSpring Cloud Sleuth å Jaeger çè§åº¦è§£åäºåå¸å¼è·è¸ªï¼éªè¯äº REST API è°ç¨å Kafka pub/sub ä¸åå¸å¼è·è¸ªçèªå¨æ£æµãæå¸æè¿ä¸ªæ äºè½è®©ä½ æ´å¥½å°ç解è¿äºè·è¸ªæ¡æ¶åå·¥å ·ï¼å°¤å ¶æ¯ OpenTelemetryï¼ä»¥åå®å¦ä½ä»æ ¹æ¬ä¸æ¹åæä»¬å¨ åå¸å¼ç³»ç» ä¸è¿è¡å¯è§å¯æ§çæ¹å¼ã
做一个滴滴打车的APP大概多少钱
滴滴打车APP价格并不是很贵,十万起步,重点是如何进行推广费用很高,目前比较流行的是小程序的开发和推广,性价比和效果都比较好的。第1种是卖模板为主的网络公司。优点是:价格低,几千块钱到万元之间就能搞定,方便,能够快速上线,微尘小程序就可以实现。缺点是:修改功能麻烦,这里需要避免低价陷阱,不要到最后才发现模板性的修改功能所花的钱比买模板还贵。而且不是独立的,一个模本卖给很多商家用,模板不是永久使用的,一般每年都要交年费。第2种是主流的方式,定制开发为主的网络公司。优点是:独一无二的,专为你的企业或者店面定制的,功能你来定,要求你来定,后期修改BUG方便,改东西也很方便,最重要的是永久使用权!!缺点是:相对价格比较高!!! 定制版的基本费用在上万元到十几万不等!不过贵也有贵的道理吧,毕竟功能做的更全面一点。最后总结,至于找什么样的小程序开发公司?花多少钱来开发?还是需要看贵公司准备的预算这块。
悦刻汪莹结婚了吗
汪莹,作为RELX悦刻的创始人,是一位后的女性创业者。她拥有西安交通大学金融学士学位和美国哥伦比亚大学商学院的MBA学位。在创立RELX悦刻之前,她曾在宝洁、贝恩咨询、优步和滴滴等公司工作,并担任过Uber中国区的负责人。汪莹的丈夫据传是IDG的投资人,其背景同样令人瞩目。
根据天眼查APP的信息,自成立以来,RELX悦刻只进行了两轮融资。年6月,该公司宣布完成了由源码资本领投,IDG资本和红杉资本中国跟投的万人民币天使轮融资。到了年,RELX悦刻又获得了万美元的融资。目前,RELX悦刻在国内电子烟市场的占有率达到了.6%。