学习
实践
活动
工具
TVP
写文章

开发云原生应用之前,你必须了解这些

本次演讲将介绍云原生和微服务的关联性,详细解析微服务中的各个部分,通过具体项目展示微服务的具体实践。

云原生应用及微服务

云原生应用是现有技术与新兴技术的结合,现有技术指的是云平台相关方面,新兴技术则是微服务架构。与之对应的是单体应用,即传统的开发应用模式将所有的服务都打包在一起。

微服务中每个服务都是独立部署的,都与DevOps息息相关,是作为一种文化在公司内部存在。从更细致多层面的角度来讲,单体应用会被分解成更小粒度的服务,每个服务都独立运行在具体的进程中间。结合容器平台的编排技术能自动管理微服务应用。服务之间允许存在语言的差异,所有的服务都有自己的存储。

优势

微服务有这样几个优点。首先它将复杂的系统简单化了,典型的就是云平台的开发,我们都知道云平台是个很复杂的系统,新来的开发人员在此之上开发的时候会有很长的学习周期。他不仅要学习现有的系统有可能还要学习新的语言,成本相对来说是很高的,而微服务的介入有效的缓解了这一问题。然后是能够独立开发和部署,不用再关心整体系统的迭代情况。微服务还有着很强的隔离性,在系统启动的时候,即使其中的某个服务出现问题挂掉了,对整个系统也不会造成太大的影响依然能够正常启动,这在原先的单体应用是很难实现的。另外由于微服务是以容器为载体,所以有较强的弹性和伸缩性。

挑战

微服务面临的第一个挑战是数据库的开发和设计,具体为如何实现一致性。实际上在微服务中只能做到最终一致性,而无法实现强一致性。第二个挑战是服务之间的通讯,单体应用在被改造成微服务之后就成了分布式的系统,这时要考虑到远程调用的方式以及调用失败后的处理。第三个挑战是测试,在细颗粒度的情况下必然会给测试带来一定的难度。最后是部署及治理,这方面目前已经有了很多的解决方案,所以就不多做讨论了。

微服务详解

API网关

微服务中首要的是API网关。因为在有众多微服务的情况下,客户端访问的时候不可能要求它请求的所有的服务。这时候就需要有一个API网关来收集客户端的请求,然后从下方的各种服务中获取信息并聚合起来,实际上相当于一个内部的聚合层。一般客户端采用的是HTTP或HTTP+REST这种比较友好的访问方式。

服务发现

之所以需要服务发现,是因为微服务架构中云上服务节点IP地址会发生变化,同一服务后端节点个数也会发生变化。服务发现的机制使得当IP发生的时候对服务的调用者无感,且无论有多少个节点都能够自动的进行负载均衡。目前有两种形式:

一种是基于客户端的服务发现;

一种是基于服务端的服务发现。

(注:图片源于网络)

基于客户端的服务发现实际上是让客户端代发请求,当请求过来的时候客户端首先会通过服务注册找到被请求服务的相关信息,然后再请求到具体的服务上去。

(注:图片源于网络)

由于各方面的原因,目前业内更多采用的是基于服务器端的服务发现方案。

数据管理

单体应用中数据管理相对比较简单,只需要单个数据库满足ACID,通过SQL的方式直接查询。

微服务的数据管理则比较麻烦,主要有几方面的原因。首先是应用无法满足ACID而是通过Base Model完成任务。其次每个微服务必须独享自己的数据库。另外服务之间只能通过API访问,不能直接访问其他服务的数据库。同时不同服务还会采用不同的数据库如关系型、NoSQL、图数据库等。

服务间通信

单体应用的服务间通信仅通过method/function call的形式就能完成。微服务由于是分布式的,所以必然要考虑到通信机制。服务间的通信机制也并不一定唯一,有可能是一对一也有可能是一对多,还有同步和异步的形式。需要强调的是在做服务间通信的时候一定要确定好API,保证API first。给API设置版本是比较好的一种方式,比如可以在同一个目录中保存不同版本的API。即使已经有了现成的微服务治理框架,也还是要考虑异常处理的相关问题,包括熔断、降级、超时处理、fallback等。

The Twelve Factors

Twelve factors是开发云原生应用必须要了解的,关于它的具体细节这里不一一赘述了,主要强调几个在实际工作中要注意的部分。首先server必须是micro这点就不用多说了。其次服务要尽量做到无状态,因为容器和微服务本身就是为了无状态而生,传统软件应用则是有状态的。常见的log机制是将log注入到容器中,不过在云原生应用中不建议采取这种方式。一般都是将log注入到宿主机的控制台上,通过微服务运行环境中的公共组件来收集日志。还有就是让开发、测试、生产环境尽可能保持一致,避免不必要的问题。

微服务详解

OpenPitrix是一个开放的平台,致力于在多个云环境中开发和部署应用程序,从而能够让应用程序无缝的运行在各个云环境中。Pitrix分解开来是PaaS加IaaS加Matrix,同时它也有PI的含义,即包含无限应用的巨大矩阵。

微服务设计与实践

OpenPitrix包含的服务有repo、app、cluster、runtime、api。其中api是API网关,对外提供REST服务,是其他服务的整合,通过grpc通信。采用的是private tables per service的方式。CI/CD是kubernetes加Jenkins。

立秋

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180809B19R8O00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码关注腾讯云开发者

领取腾讯云代金券