阿里云基于 Go 的微服务架构分享

做者介绍前端

花名聪心,阿里云技术专家,主要负责阿里云OpenAPI,Services architectre 技术服务的实现。golang

云产品前端架构服务器

众所周知,阿里是以 Java 开发为主,最近引用 GO 在微服务架构上面进行开发,本次分享也是围绕这个主题进行叙述。架构

图 1负载均衡

图 1 所示,是咱们最先期的前端微服务架构图,当时不存在API网关服务、天象全链路监控以及外部服务这几个模块,而且蓝色这部分也并无被应用起来。所以进行了一场微服务重构过程,产生了最新的前端微服务架构图(图 2)。框架

图 2运维

图 2 是目前的前端微服务架构,其中,OpenAPI是前端入口;API网关目前被商业化,由它来调度内部的dubbo服务;其次是最为重要的中间件,由其支撑注册中心、控制台、阿里云日志服务、消息队列服务以及内部的天象全链路监控系统;外部服务主要是进行与其余云产品的交互,好比VPC、VPS等;驱动&接口服务也进一步的开发应用起来。下面着重介绍整个架构中的几个板块。微服务

  • 日志服务性能

图 3阿里云

在这么多微服务组件中,日志采集是不可或缺的,阿里云日志服务对象就是ELK,实际上它的成本是比较高的,而使用Kafka则成本要相对低不少。如今会提供不少中间的服务进行协调,方便进行业务统计工做(图 3)

  • API网关服务

图 4

网关服务位于整个架构的最上层;由于认证系统的存在,因此再使用老架构的形式则每个对外服务都须要咱们本身手动进行接入,这样会耗费很大的工做量,因此新版的架构将API网关服务放在最上层,一方面在认证服务方面省去了人力成本其次在流量控制上,也起到了关键性的做用(图 4)。

  • 天象全链路监控系统

  • 图 5

图 5 所示是天象全链路监控系统的界面,这一块在整个微服务架构中是不可或缺的一个服务。当架构微服务化后每每会形成链路变长的状况发生(图左所示)。使用天象能够对全链路进行监控。

  • Dubbo

Dubbo是一个RPC框架,在11-12年间名气都是比较响的,当时它有2000个节点,3B+ request,在阿里巴巴、京东以及当当网的使用度是比较高的。它最实用的地方主要在于如下几点:

一、服务动态注册&服务发现

二、SOA服务治理

三、转负载均衡

四、熔断、服务降级

图 6

图 6 所示是Dubbo服务治理图。其中包括了调度中心、监控中心、注册中心、治理中心这几项服务,若是要作到100%规范,那么图中的每一个点都须要去遵照。由于阿里目前只有几百个节点,因此能够很放心的使用这个框架而不须要担忧它有任何的性能问题。

图 7

图 7 所示。是讲Dubbo部署到可服务化的一个示意图,当应用起来后会启动 Repository,接下来comsumer便会开始服务了,全部应用都会收到通知,无论新版本、新接口或是新的服务器上线都会接收到通知。此时若是须要调用,便会去寻求最适合的方式;在此之上的Monitor,也会持续回报运维人员。其实关于Dubbo的将来规划,就是能够解决全部SOA的事情,目前仍是人工的在执行这件事情,没有施行自动化方案,这也是有遗留的历史因素存在。

Micro-services complexity at 阿里云

阿里云前端架构的微服务化是一个必然的趋势,早在2014年业务增加并不显著,可是14年之后,随着云计算行业的发展,业务增加量也日新月异,所以咱们不得不推翻此前的架构,从新构建新的架构系统,固然整个过程并不是想象的那么容易,因此微服务化必须天然的引进,必需要作小,作简单,而后让整个产品能够快速推动。

前面提到,Dubbo、Spring解决了大部分SOA问题,理论上讲若是Dubbo服务拆解的很干净,那么咱们理应很高兴。可是问题在于,如何能在拆解以后仍旧能够保持有规范的交付倒是一个不容易解决的问题。因此当中咱们也采起过不少策略,好比代理服务,可是在整个微服务过程当中也会产生大量成本,如何下降又是新的须要解决的问题。

图 8

图 8 是阿里内部使用语言的开发人员的人数统计图,从图中能够看出,golang的使用人数实际上是相对较少的,可是其增加速度倒是最快的。那么是什么缘由致使gopher数量的急剧增长,大部分人都知道Java能够比做为一个静态艺人,对于不少Java开发人员来讲,历史遗留包袱比较重,培养一个能在业务系统上作支持的Java人员很难,可是若只是Spring开发人员,也未必是符合咱们所需。

所以咱们转型GO,GO的神奇在咱们在使用gRPC时的一些感悟,grpc是一个高性能的开源RTC框架,gRPC 基于 HTTP/2 标准设计,带来诸如双向流、流控、头部压缩、单 TCP 链接上的多复用请求等特。这些特性使得其在移动设备上表现更好,更省电和节省空间占用。

图 9

图 9 所示是Go kit与 Dubbo的一些对比,关于Go kit的更详细的内容能够在gokit.io上进行了解。