12月15日,由腾讯云主办的首届“腾讯腾讯云开发者社区开发者大会”在北京举行。本届大会以“新趋势•新技术•新应用”为主题,汇聚了超40位技术专家,共同探索人工智能、大数据、物联网、小程序、运维开发等热门技术的最新发展成果,吸引超过1000名开发者的参与。以下是DevOps分会场的演讲内容,稍作整理,分享给大家。
其实腾讯云上很多产品,微服务的架构是区别于运维发布的东西,它更多的是设计理念。平常谈微服务架构,其实就是今天的主题TSF。
这是一个架构的路线图,最初企业可能是一个单体架构,能够满足快速迭代的需求,今天的企业随着业务规模的增长逐渐演进像主题结构,最近几年随着互联网用户的增长,随着企业里面服务数量的增加,以前的主架构可能面临一些瓶颈,微服务的架构其实是说我们服务在启动了时候,会有注册中心,从注册中心获取其他服务的实例列表。
微服务应用只是其中的一个部分,以前人们用微服务的时候,他自己会下载Jar 包,自己去搭建服务中心,自己去搭建自己的ES,自己构建自己的一个发布系统。微服务只是其中的一环,围绕微服务需要很多周边系统的建设。
这是以前第一批采用微服务的国内企业做法,除了开源社区提供了一些开源的组件包以外,很多都是需要自己建设的。包括服务自己能力的建设,服务自己的能力包括了配制管理的能力,包括分布式系统的搭建,这些工作都需要企业关心,这些工作我们认为凡是标准化的工作都应该标准化,这也是云的思想。
这里面摘选了一部分公司内部的对话,开发的同学要接受很多新的理念,我们看到有的工程师可能会有一些抱怨,包括版本回滚方案,这个都是我们在现实当中会遇到一些问题,这些对于传统企业来说,需要大都构建一个平台,这个成本是非常高的。
其实这个自然而然让我们想到了微服务的架构,其实就要清楚的划分出边界,哪个是企业需要自己定制化的东西。微服务注册、鉴权、限流、降级,这些能力是可以标准化的,因为只要修改一些配制、参数就可以标准化。虚拟机应用发布也是一种发布能力,发布是可以标准化的流程,像运维,就是日志采集,这些东西是可以直接做产品化的东西,对外输出,而不需要每个企业开发这样的系统,一是难以做到运维,二是它的质量没有办法做好很好的保证。
在定义了这些标准化的时候,把这些能力做一个产品化,用户关心的是一个业务逻辑,业务逻辑如何去变成一个程序,其实我们做开发的都知道,我通过不同的语言框架可以实现这个东西,其实我们更建议往开源这条路走。
容器化的应用发布管理,集成TSF服务注册发现、调用链、基础监控、RPC服务监控,这些做一些优化和改造。有一些能力,比如说像限流,Spring cloud没有相应的组件,他本身没有把限流的能力做一个组件提供给用户,我们也提供了一些自研的能力,像限流、路由这些能力,都是我们进行改造和优化的。
另外,关于服务网格能力的输出,我们知道在谷歌推出 istio之前,有一些数据面的选择,比如说像Envoy , Conduit,我们最终选择了Envoy,因为谷歌整合了几家做 Mesh的厂商,最终控制面我们采用了Istio,数据面上采用了Envoy 进行组合,在这个基础上我们进行了封装,同时我们对它进行了优化。可以看到整个TSF没有自己造轮子,他一部分是基于业界别人的开源标准,如果用户直接用了服务网格的思路设计他的框架,那他很好的迁移到云上来,这样也降低了开发者迁移上云的成本。很多时候并不是说我选用哪个虚拟机或者容器,我们知道有些客户,比如说能力比较强的互联网客户,他可能自己自研了这样一套服务框架,这样的能力不是每家企业都具备的,腾讯云在完善了一些基础的能力之后,今天的分会场其实是一个开发者的分会场,帮助开发者更好的服务应用。
这是TSF在SpringCloud方面的优化,是基于开源Netflix OSS、Hashicorp服务的商业化封装,比如说配制加密组件,还有一个CLOID还支持API级别的服务路由、鉴权、流量控制。
关于TSF的优势,TSF可以做到同一个机房的服务能力,服务中心本身是微服务框架里面,非常关键的一个组件,微服务启动的时候,你需要注册到服务中心,然后通过服务中心发现其它的微服务,我们能做到同城跨可用区的能力。比如说在广州某个区我们部署了用户的代码,我们发现广州一区部署的注册中心挂了以后,用户的微服务信息是能够无缝地接到了二区。另外一种,机房也会挂掉,那我们能够很快的迁移到广州二区,广州二区也部署了同样的微服务,一个是基础层面的容灾,一个是业务层面的容灾。
ServiceMesh,重点可以关注(英文),ServiceMesh被定义为下一代微服务平台,核心组件有4个:Envoy、MIxer、Pilot、Auth,Envoy。ServiceMesh和TSF的结合点有哪些?用户在发布的时候不会关注sidecar,把sidecar进行发布,我们TSF会帮助你把ServiceMesh运行起来,帮助你把流量进行一个托管。这个的好处,以前已经写的代码不需要改造,就可以直接迁移到TSF平台上。那MS的应用和以前的老应用可以进行一个部署,MS可以帮助你做请求的转发和响应。优势包括以下几点,就像我们支持多协议、丰富的规则,支持访问控制,支持服务的健全,这些能力我们认为是sidecar和后台组件之间的事情。
我们发现TSF和ServiceMesh是紧密结合的,他的应用和K8S需要进行一个部署和发布。TSF针对这个场景进行了一个优化,我们发现我们有的用户他可以对容器不熟悉,他可能只对虚拟机比较熟悉,用微服务虽然跟容器有一个很好的契合点,因为容器是支持资源的利用率非常高,但是有些用户,我们要意识到发展进程,有些传统的企业对容器不大熟悉。
我们是如何做到和K8S的结耦的,一个是Pilot/Mixer,我们目前采用Consul作为一个配制管理的中心,去增加配制管理的能力。还有一部分,Pilot无法获取服务节点健康信息,这个时候Envoy通过HDS接口上报健康信息给Pilot。我们TSF里面,通过Pilot、agent增强能力,支持启动时根据描述文件自动注册服务。新增APIserver组件、接口consul、负责配制中心。
HTTP/2是一个经过实践检验的标准,TSF团队建议将私有化协议进行分装的过程,HTTP/2的方式,把原数据、请求的服务名放到HTTP/2Headers里,请求参数,传输body序列化,这是TSF支持的一个思路。
接下来是TSF平台上的一些开发者和运管平台的能力,开发者在TSF平台做的事情非常多,像集群、空间管理,我们在私有化环境中,会支持更丰富的容器,TSF可能不是一个容器发布平台,所以我们定义了一部分对接容器的标准,在私有云的场景下,我们会和其它的容器平台进行一个对接,我们供给用户更多的选择。
服务和服务之间存在同步场景、异步场景,这里画的CMQ,我有消息可能不是同步返回的,那可能需要建一个异步返回。网关对一些日志、监控进行认证,像TSF微服务平台以及其它云服务器的一个入口产品。
分布式事务,在分布式场景下,我们会经常遇到数据不一致的问题,这里面举个例子,我们的客户他就是有一个场景,他们想做一个促销活动,促销活动涉及到两方面,一方面他们会有减免券或者折扣券的方式,你不能说我扣了这个券,但是你支付失败了,这个时候能保证你的券加回来,或者你的券扣失败了,但是你钱加回来,你涉及到多个服务的时候,必须要确保事务数据的一致性,TSF提供了一个基于TCC的解决方案,确保一致性,在公司内部已经在大型的金融项目里面经过了认证和实践。
开发者关心的其实不仅仅只是这些,包括我们提供了像SDK,提供一些代码服务编排的能力,都会在官网里面进行呈现。后面介绍一些运管平台的能力,这张图想讲的是服务治理的能力,TSF平台,比如说对服务鉴权,我对来源的请求,可以屏蔽或者认证,服务降级,我保证部分服务,同时限制部分服务为较低优先级,这些能力都是我们平台提供的管控能力。在ServiceMesh场景下,用户不用关注这些,他会做流量的控制和能力,用户只需要做一个参数的配制就可以了,这个如果让每个用户开发,其实成本是非常高的。
我们谈完应用、发布、上线,我们发现有时候打开一个页面的时候,非常慢,我们打开分析工具看请求耗时的分布情况,但是分析工具可能只能解决前端页面,但是你没有办法知道请求经过了后台之后,它的每个环节的情况,这张图展示的是服务与服务之间一个依赖关系的图谱,你可以看到服务整体运营的情况。左上角的图,是请求正常和失败的情况,本身我们也做到了日志的联动,比如说我知道了这个请求,我可能知道与它相关的日志请求,我们做到了调用链和日志的联动。
接下来是一些实践案例。这是一个客户案例,有一个解决方案的系统,这个客户会发现,他的特点就是说,他以前不是用的微服务架构,他以前采用了一些传统的设计,比如说定制化的通讯协议,比如说他用了Tuexdo,后面他想一步步迁移到腾讯云,我们通过ServiceMesh思想,去托管他的私有化协议,去解决私有化场景下的微服务框架。
另外,新零售场景下的微服务实践,永辉超市,大家可能很直观的看到永辉超市里面的人脸识别或者生鲜上门的业务,大家没有看到支撑这些业务的能力,这些能力可能并不是每一位C端用户都能够感受到的,如何在短期内快速构建这些应用和服务,是通过技术平台的能力支持的,我们通过一站式微服务平台,为零售业务中台提供无线扩展能力,我们在15天内快速帮助永辉超市构成一个迭代。
这张图是我们在全球合作伙伴大会上汽车行业的一个分享者,介绍了TSF作为车流网的一个技术总干支持应用开发,这部分能力在车连网的一些KS里面都广泛应用了。这是在每个车上可以看到车展的路况信息,底层用的是TSF的服务。这是他们车流网技术终端的架构图。这是我们落地的一些客户案例,整个TSF客户群体非常广泛,包括了像零售、汽车、烟草、政府,它本身是一个新的理念,这个理念给用户提供一些指导和落地操作,让用户体验到微服务能够帮用户带来一些价值,这些价值提供给客户,无论是收入上还是理念上,带来实际的收益。