【PaaS 技术分论坛】PaaS平台与微服务
主讲人:华为云BU PaaS微服务基础架构架构师 张琦
一、微服务技术的复杂性
大家现在常常提起微服务技术,实际上微服务虽然给我们的架构带来了很多好处,但同时也带来了大量的复杂性。因此,一个好的PaaS平台或者说微服务或应用管理的平台,就变成一个至关重要的部分。后面将会以一个样片的形式来展示如何通过PaaS平台进行微服务的开发管理,包括怎样开发一个微服务系统,系统开发好以后应该怎样进行部署,以及部署完以后对它的运维和治理。
微服务会带来很大的复杂性。之前我们所有的业务都在一个单体应用里,后期我们的管理只是对一个应用的管理,我们把它分布式化,拆分成若干个微服务以后,我们面临的这些事情,实际上,也是做创建、编码、编译、构建、部署,左边那个圈就是开发时期的一个生命周期,右边这个圈,就是运维时期的一个生命周期。如果你的单体应用,要做这么多环节的管理,那么如果把它拆成微服务以后,你的分布式化以后的多个应用,都要走这样的生命周期的管理,都要做这些事情,那么你的这个应用程序或者你整体的管理的这个规模,是变得非常复杂的。
二、案例分享
下面我们就以一个例子来做展示,来看一下怎么用PaaS平台,来尽量的减少这个复杂性,来方便这个微服务系统的管理。这个例子是这样的:这是一个袜子商店,其实这个也是网上或者说是社区里面用来讲解微服务架构用得比较多的一个例子,当然它也是开源的,从GitHub上可以随时下载的,我们对它做了一些改造,详细的情况后面会介绍。这个微服务的架构和通常我们的一个典型应用的架构差不多,更多的企业级应用都会比它更复杂,很少有比它更简单的,在这个微服务系统里面,它是由十几个微服务来组成的。从架构来看,用户下面,会有一个前端,所有的这个系统的前端是用Node.js去写的一个前端页面。这是一个袜子商店,是一个比较典型的电商的系统,我们把电商的这个系统拆成了若干个微服务,像订单、支付、用户管理、产品分类,以及购物车,包括下面的物流的部分,就是运货这个环节,所以说,这个微服务的一个特点就是合适的微服务用最合适的技术去开发。
我们这样的一个系统里面十几个微服务,包含很多种数据库,有MongoDB,有MySQL,甚至还有一个消息队列RabbitMQ,另外我们的开发语言,是用了Java和go这两种语言,前端是用的Node.js,所以整个系统是相对来说比较复杂的,它用到了三种不同的语言,用到了三种不同的数据库和中间件。
所以这样的一个系统怎么来对它进行开发?接下来我们看一下示例,现在就有我们的这个PaaS平台,就有公有云,大家都可以用这个平台从华为公有云里面进去。我们这次的讲解是站在微服务的角度去讲,从微服务的开发、部署、运维的角度去讲,所以我会用微服务来串起这条线。首先,我们看这里面我们的微服务,有一个专门的菜单,在这个微服务概览里面就是这个界面,我们可以看到一个典型的微服务,它的所需要做的步骤,其实大概就是下面这几步:开发、发布、部署、管理,通过这几步让你的微服务的系统上线,这里说的是系统,而不是单个的微服务。
三、操作流程
首先,我们可以在这里面创建一个本地工程,这里你可以填一些比较简单的信息。当然这是开发Java云服务的,因为现在我们的整个微服务框架是开源的,现在开源的这部分是Java的微服务框架,那么这里可以选择微服务框架的具体的版本。这下面有一些高级的设置,这些设置可以用默认值,可以不写。另外就是我们的开发风格,因为我们开发这种Java的程序的话,我可以用这种透明RPC的方式,因为很多朋友可能之前用惯了这种dubbo的开发方式,所以他们是用这种透明RPC的开发方式,还有很多应用,我们是用Spring MVC或者是用其它开发方式来开发的应用,所以说这里提供了三种不同的开发方式,比如我选择这个Spring MVC的开发方式。
然后就会直接创建这个工程,之后下载到本地。
我们可以大致看一下,创建好的这个工程里面就是一个项目的骨架,同时,还包括一个DockerFile。你可以基于这个DockerFile做一些简单的修改,就可以去打你的Docker镜像了。
我们简单看一下这个Java代码。我们现在这个Java程序的开发,像我们这些接口的暴露,用的都是Spring MVC的方式来暴露的,如果我们之前写的一些遗留应用,用的都是这种Spring MVC的方式的话,可以非常方便的用这个框架来进行开发,当然你用这个框架的话,唯一要做的就是你需要加额外的少量的几个标注,这里就不详细讲了,因为整个这个技术都是开源的,我们可以到开源社区里面,大家一起来仔细地看或者是贡献。
之后,这里要说的就是我们刚才看到的我们的这个袜子商店,是由十几个微服务组成的,还有不同的语言。通常情况下,我们遇到的更多的企业级的应用,它的部署不像互联网的应用一样,一个一个微服务去上线,不断的演进,它不是这样的,它是整个系统开发完了以后以系统为单位去进行部署和管理的。那么这里就涉及到了一个编排的概念,就是我怎么把我这13个微服务,一次性的编排好,一次性的上线。在这里,我们提供了一个设计器,通过这个设计器,其实我们是可以通过这种拖拖拽拽的方式,去开发一个部署编排脚本的,用这种可视化的方式就可以拖拽一个,这里我们就用事先我们画好的一个,就是刚才我们那个例子里面13个微服务,包括数据库和我自己开发的各种语言的微服务。
这个看起来是比较复杂的,我们可以直接看一下源代码。可以看到,实际上这个源代码,我们用的也是一个标准,叫做Tosca标准,是一个标准的编排语言的描述。在这里,它就描述了我这一个系统有多少个结点,我们的微服务的组成,我们每个微服务用的是哪个容器,我部署它的时候用的是哪些属性,哪些环境变量,我们都在这一个文件里面去描述。
在这里面描述好了以后,我就可以直接部署,所以可以直接点“部署”,但是时间关系,这里就直接看一下我们之前部署好的。我们刚才的编排脚本直接点了“部署”以后,最后的效果,在应用管理里面就可以看到,我们的这些微服务就已经部署好了,每一个就是一个微服务,或者说每一个就是一个容器。
在这里面我们可以看到每一个微服务的状态,比如说我们刚才说的这个Node.js的程序,这就是我们的Node.js程序的一些基本的信息。
当然我可以直接访问,这就是我们这个袜子商店。可以登录,加购物车,然后可以下单购买,这是一个比较完整的电商系统。
另外,我这个微服务部署好了以后,其实很重要的一点是对它的后期的运维,运维在微服务的世界里面是包含两部分的。在微服务的世界里面,对一个微服务系统的运维其实是包含了APM,我们可以看到我们微服务的运行状况,另外,我们还要对它进行治理,也就是说我要对它运行中的行为做一些调整,让整个系统的运行状况到一个最佳的状态,我们现在在这里就可以把之前一些测试的微服务打开。我们可以看到整个微服务的系统是由许多的微服务组成的,我们这个微服务之间的互相调用的关系也在这里,可以看到每一个微服务的一些基本的信息。
刚才说到了,一个非常重要的地方就是对它做的一些治理的工作。我们现在提供了这些治理的能力,我们可以在运行时期对它的一些行为作一些调整,包括负载均衡的策略,我们的每一个微服务都是自己在做负载均衡,我们在这里,可以对它的负载均衡的策略来进行设置。另外,就是一些限流、降级等容错策略的设置,还有就是熔断的设置,这里可以填一些详细的熔断的参数,比如说我们设置一个自动熔断,就是填一些参数,然后直接点“确定”就可以了,这个就传上去了。这一块做了治理调整以后,实际上这些效果,这些治理的动作都是实时生效的,是不需要你去重启你的应用的。
这个就是一个比较完整的微服务,刚才非常快地浏览了一下,有很多的细节的能力还没有看到。当然刚才也提到,我们整个是一个多租户的系统,那么在这里,我们试着用其他的租户登录一下。
不同租户之间的应用,都是隔离的,你在另外一个租户里面是看不到我们刚才部署的那些微服务的,那我用这个来看一下APM的能力。
在这个租户里面,他的应用,他的微服务,我们可以看到,从运维里面进去,可以看到它的应用拓扑,这个应用拓扑,实际上就是我们所谓的调用链。
不同于刚才我们看到的那个微服务之间划线的关系,那边的划线的关系,我们只能够看到微服务之间的关系,就是谁调用谁,谁跟谁有依赖关系,在这里的调用链,是可以分析到每一个事务的级别的,是每一个事务之间的调用链的关系。
所以说我们通过这里的APM的能力,就可以反过来去指导我们进行刚才的那些服务治理的动作,从而通过这一系列的组合的动作,不仅保证你的这些微服务快速地开发,快速地部署,快速地上线,并且还保证你在运行时期随时可以去对它进行这种动态的调整,让它的工作状态达到一个最优的效果。这里大体地浏览了一遍一些比较粗糙的能力,其实大家可以到这个公有云上来继续体验。我们的整个微服务框架,现在都是开源的,所以如果大家感兴趣的话可以到这里来试用,也欢迎大家一起到这个社区里面来贡献。
视频链接:https://bbs.huaweicloud.com/videos/f9dcddf5782811e7b8317ca23e93a891
以上文字内容由【内容众创小组-栀】整理
- 点赞
- 收藏
- 关注作者
评论(0)