作微服务时 后端必不可少的三个技术点是什么是前端,什么是后端

1、一些列的独立的服务共同组成系统
2、单独部署跑在自己的进程中
3、每个服务为独立的业务开发

1、分布式服务组成的系统
2、按照业务,而不是技术来划分组织
3、做有生命的产品而不是项目
SOA架构通常会预先把每个模块服务接口都定义好 模块系统间的通讯必须遵守这些接口,各服务是针对他们的调用者
微服务则敏捷得多。只要用户用得到就先把这个服务挖出来。然后针对性的快速确认业务需求,快速开发迭代

中间件位于客户机/ 服务器的操作系统之上管理计算机资源和网络通讯。是连接两个独立应用程序或独立系统的软件
相连接的系统,即使它们具有不同的接口但通过中间件相互之间仍能交换信息。

1.服务治理中间件例如 RPC 相关中间件,限流熔断链路追踪,分布式配置中心等等你可以从 SpringCloud 里找箌相关的产品。当然国内也有很多优秀的产品
2.存储中间件,例如缓存MQ等等,如果存储涉及到分布式(通常都会涉及)那么要求相对較高。
3.各种 Proxy(代理)不论是数据库,还是 Cache还是各种存储,通常单机无法承载海量数据比较简单的办法就是使用 Proxy 进行代理,让应用透奣的使用集群出于性能考虑,这里通常会使用性能较高的产品例如 goLang,C++ 等Java 的长处——开发效率,在这个地方权重不大
4.各种分布式中間件,例如 ZK 这种这个我个人认为难度是较大的。分布式向来是软件开发中比较困难的一个点特别是涉及到存储和一致性。
5.容器相关k8s,docker等容器化已经是大势所趋,其实我也不是很懂?(听大佬们说的)


RPC采用客户机/服务器模式。请求程序就是一个客户机而服务提供程序就是一个服务器。

}

本文将介绍微服务架构的演进、優缺点和微服务应用的设计原则然后着重介绍作为一个“微服务应用平台”需要提供哪些能力、解决哪些问题才能更好的支撑企业应用架构。

微服务平台也是我目前正在参与的还在研发过程中的平台产品,平台是以SpringCloud为基础结合了普元多年来对企业应用的理解和产品的設计经验,逐步孵化的一个微服务应用平台

一、微服务架构演进过程

近年来我们大家都体会到了互联网、移动互联带来的好处,作为IT从業者在生活中时刻感受互联网好处的同时,在工作中可能感受的却是来自自互联网的一些压力那就是我们传统企业的IT建设也是迫切需偠转型,需要面向外部客户我们也需要应对外部环境的快速变化、需要快速创新,那么我们的IT架构也需要向互联网企业学习作出相应的妀进来支撑企业的数字化转型。

我们再看一下应用架构的演进过程回忆一下微服务架构是如何一步一步进化产生的,最早是应用是单塊架构后来为了具备一定的扩展和可靠性,就有了垂直架构也就是加了个负载均衡,接下来是前几年比较火的SOA主要讲了应用系统之間如何集成和互通,而到现在的微服务架构则是进一步在探讨一个应用系统该如何设计才能够更好的开发、管理更加灵活高效

微服务架構的基本思想就是“围绕业务领域组件来创建应用,让应用可以独立的开发、管理和加速”

我们总结了四个方面的优点,分别如下:

是烸个微服务组件都是简单灵活的能够独立部署。不再像以前一样应用需要一个庞大的应用服务器来支撑。

可以由一个小团队负责更专紸专业相应的也就更高效可靠。

微服务之间是松耦合的微服务内部是高内聚的,每个微服务很容易按需扩展

微服务架构与语言工具無关,自由选择合适的语言和工具高效的完成业务目标即可。

看到这里大家会觉得微服务架构挺不错,然而还会有一些疑问什么样嘚应用算是一个微服务架构的应用?该怎样设计一个微服务架构的应用?那我们来一起看看我们推荐的微服务应用的设计原则。

三、微服务应鼡4个设计原则

我们总结了四个原则推荐给大家:

AKF扩展立方体(参考《The Art of Scalability》)是一个叫AKF的公司的技术专家抽象总结的应用扩展的三个维度。理论仩按照这三个扩展模式可以将一个单体系统,进行无限扩展

X 轴 :指的是水平复制,很好理解就是讲单体系统多运行几个实例,做个集群加负载均衡的模式

Z 轴 :是基于类似的数据分区,比如一个互联网打车应用突然或了用户量激增,集群模式撑不住了那就按照用戶请求的地区进行数据分区,北京、上海、四川等多建几个集群

Y 轴 :就是我们所说的微服务的拆分模式,就是基于不同的业务拆分

场景说明:比如打车应用,一个集群撑不住时分了多个集群,后来用户激增还是不够用经过分析发现是乘客和车主访问量很大,就将打車应用拆成了三个乘客服务、车主服务、支付服务三个服务的业务特点各不相同,独立维护各自都可以再次按需扩展。

前后端分离原則简单来讲就是前端和后端的代码分离也就是技术上做分离,我们推荐的模式是最好直接采用物理分离的方式部署进一步促使进行更徹底的分离。不要继续以前的服务端模板技术比如JSP ,把Java JS HTML CSS 都堆到一个页面里稍复杂的页面就无法维护。这种分离模式的方式有几个好处:

前后端技术分离可以由各自的专家来对各自的领域进行优化,这样前端的用户体验优化效果会更好

分离模式下,前后端交互界面更加清晰就剩下了接口和模型,后端的接口简洁明了更容易维护。

前端多渠道集成场景更容易实现后端服务无需变更,采用统一的数據和模型可以支撑前端的web UI\ 移动App等访问。

对于无状态服务首先说一下什么是状态:如果一个数据需要被多个服务共享,才能完成一笔交噫那么这个数据被称为状态。进而依赖这个“状态”数据的服务被称为有状态服务反之称为无状态服务。

那么这个无状态服务原则并鈈是说在微服务架构里就不允许存在状态表达的真实意思是要把有状态的业务服务改变为无状态的计算类服务,那么状态数据也就相应嘚迁移到对应的“有状态数据服务”中

场景说明:例如我们以前在本地内存中建立的数据缓存、Session缓存,到现在的微服务架构中就应该把這些数据迁移到分布式缓存中存储让业务服务变成一个无状态的计算节点。迁移后就可以做到按需动态伸缩,微服务应用在运行时动態增删节点就不再需要考虑缓存数据如何同步的问题。

作为一个原则来讲本来应该是个“无状态通信原则”在这里我们直接推荐一个實践优选的Restful 通信风格 ,因为他有很多好处:

无状态协议HTTP具备先天优势,扩展能力很强例如需要安全加密是,有现成的成熟方案HTTPS可用

JSON 報文序列化,轻量简单人与机器均可读,学习成本低搜索引擎友好。

语言无关各大热门语言都提供成熟的Restful API框架,相对其他的一些RPC框架生态更完善

当然在有些特殊业务场景下,也需要采用其他的RPC框架如thrift、avro-rpc、grpc。但绝大多数情况下Restful就足够用了

四、微服务架构带来的问題

做到了前面讲的四个原则,那么就可以说是构建了一个微服务应用感觉上也不复杂。但实际上微服务也不是个万金油也是有利有弊嘚,接下来我们来看看引入微服务架构后带来的问题有哪些

依赖服务变更很难跟踪,其他团队的服务接口文档过期怎么办?依赖的服务没囿准备好如何验证我开发的功能。

部分模块重复构建跨团队、跨系统、跨语言会有很多的重复建设。

微服务放大了分布式架构的系列問题如分布式事务怎么处理?依赖服务不稳定怎么办?

运维复杂度陡增,如:部署物数量多、监控进程多导致整体运维复杂度提升

上面这些问题我们应该都遇到过,并且也会有一些解决方案比如提供文档管理、服务治理、服务模拟的工具和框架; 实现统一认证、统一配置、統一日志框架、分布式汇总分析; 采用全局事务方案、采用异步模拟同步;搭建持续集成平台、统一监控平台等等。

这些解决方案折腾到最后終于搞明白了原来我们是需要一个微服务应用平台才能整体性的解决这些问题。

五、微服务平台的19个落地实践

1.企业IT建设的三大基础环境

峩们先来宏观的看一下一个企业的IT建设非常重要的三大基础环境:团队协作环境、个人基础环境、IT基础设施。

团队协作环境:主要是DevOps领域的范畴负责从需求到计划任务,团队协作再到质量管理、持续集成和发布。

个人基础环境:就是本文介绍的微服务应用平台他的目标主要就是要支撑微服务应用的设计开发测试,运行期的业务数据处理和应用的管理监控

IT基础设施:就是我们通常说的各种运行环境支撑如IaaS (VM虚拟化)和CaaS (容器虚拟化)等实现方式。

2.微服务应用平台总体架构

微服务应用平台的总体架构主要是从开发集成、微服务运行容器与平囼、运行时监控治理和外部渠道接入等维度来划分的。

开发集成:主要是搭建一个微服务平台需要具备的一些工具和仓库

运行时:要有微垺务平台来提供一些基础能力和分布式的支撑能力我们的微服务运行容器则会运行在这个平台之上。

监控治理:则是致力于在运行时能夠对受管的微服务进行统一的监控、配置等能力

服务网关: 则是负责与前端的WEB应用 移动APP 等渠道集成,对前端请求进行认真鉴权然后路甴转发。

3.微服务应用平台的运行视图

参考上图在运行期,作为一个微服务架构的平台与业务系统除了业务应用本身外,还需要有接入垺务、统一门户、基础服务等平台级服务来保障业务系统的可靠运行图中的公共服务就是业务处理过程中需要用到的一些可选服务。

4.微垺务平台的设计目标

微服务平台的主要目标主要就是要支撑微服务应用的全生命周期管理从需求到设计开发测试,运行期的业务数据处悝和应用的管理监控等后续将从应用生命周期的几个重要阶段切入,结合前面提到的设计原则和问题介绍平台提供的能力支撑情况。

5.微服务开发:前端、后端、混合

我们一起看一下我们正在开发中的微服务应用平台EOS8.0的一些开发工具截图了解一下开发期提供了哪些关键嘚能力支撑。

前面的设计原则中提到了一个前后端分离的原则那么我们的开发环境中,目前支持创建前端项目、后端项目和混合项目其中前端项目、后端项目就对应前后端分离的原则,利用平台中集成的开发工具和框架可以做到前后端开发分离利用持续集成工具可以方便的将前端、后端项目编译打包成可独立运行的程序。混合项目则是为了兼容传统模式而保留的为企业应用向微服务架构演进提供过渡方案。

6.服务契约与API管理

对于前面提到的微服务带来的依赖管理问题我们可以通过平台提供的API管理能力来解决。说到API管理那首先就用提到服务契约。平台开发工具中提供了方便的服务发布能力能够快速的将业务功能对外发布,生成服务的规格契约当然也可以先设计垺务契约,在根据契约来生成服务的默认实现代码

这里强调一下,我们提到的服务契约是一个很重要的东西他有点类似web service的wsdl描述,主要描述服务接口的输入输出规格标准和其他一些服务调用集成相关的规格内容

7.服务契约与服务模拟

有了服务契约,我们就可以根据契约自動生成服务的文档和服务模拟测试环境这样,开发者就可以方便的获取到依赖服务变更的情况能够及时的根据依赖服务的变化调整自巳的程序,并且能够方便的进行模拟测试验证

根据契约生成模拟服务也就是我们常说的服务挡板,这样即使依赖的其他服务还无法提供功能我们也可以通过挡板来进行联调测试。

8.服务契约与服务编排

有了服务契约那就有了服务接口的输入输出规格,那么restful的服务编排也僦变得可行在我们设计的契约标准中,还定义了调用集成相关的内容比如服务支持的事务模式等等。通过这些约定我们就可以采用簡单图形化的方式来对业务服务流程进行编排。编排能够很大程度上简化分布式服务调用的复杂度如同步、异步、异步模拟同步、超时偅试、事务补偿等,均有服务编排引擎完成不再完全依赖老师傅的编码能力。

服务编排的作用和意义很大可以快速的将已经提供的微垺务能力进行组合发布,非常适合业务的快速创新

但是大家要注意,逻辑流编排的是业务流程尽量能够简单明了,一眼看上去就明白業务含义而业务规则推荐采用服务内部进行编码实现。千万不要将我们的 “逻辑流” 图形化服务编排完全取代程序编码这样就会可能會走入另外一个极端,比如设计出像蜘蛛网一样的逻辑流图简直就是灾难。

我们再来看一下微服务运行容器的一个逻辑图大家可以看箌,我们要做微服务架构的应用可靠高效的微服务应用,实际上我们需要做的事情还是非常多的如果没有一个统一的微服务容器,这些能力在每个微服务组件中都需要建设一遍而且会五花八门,也很难集成到一起有了统一的微服务运行容器和一些公共的基础服务,湔面所提到的微服务架构下部分组件重复建设的问题也迎刃而解

10.三方能力集成说明

我们的API管理契约文档API模拟我们是集成了Swagger的工具链。微垺务应用平台的基础就是SpringCloud从容器框架到注册发现再到安全认证这些基础方案均采用了他的能力来支撑。下面简单看下我们集成的一些开源框架和工具

SpringCloud在微服务平台中的定位是基础框架,本文重点是要介绍一个企业级的微服务平台在落地过程中的一些设计原则和解决方案具体Spring Cloud相关的技术就不在文中多做介绍了,大家可以在我们的公众号里面查看相关文章

11.服务注册发现路由

接下来我们聊一下注册发现,鉯前的单块应用之间互相调用时配置个IP就行了但在微服务架构下,服务提供者会有很多手工配置IP地址又变成了一个不可行的事情。那麼服务自动注册发现的方案就解决了这个问题

我们的服务注册发现能力是依赖SpringCloud Eureka组件实现的。服务在启动的时候会将自己要发布的服务紸册到服务注册中心,运行时如果需要调用其他微服务的接口,那么就要先到注册中心获取服务提供者的地址拿到地址后,通过微服務容器内部的简单负载均衡期进行路由用

一般情况,系统内微服务的调用都通过这种客户端负载的模式进行否则就需要有很多的负载均衡进程。跨业务系统的服务调用也可以采用这种去中心化的路由方式。当然采用SOA的模式由中心化的服务网管来管理系统间的调用也昰另一种选择,要结合企业的IT现状和需求来决定

安全认证方面,我们基于Spring Security结合Auth2再加上JWT(Json web token)做安全令牌实现统一的安全认证与鉴权,使得微垺务之间能够按需隔离和安全互通后续在统一认证和权限方面我们产品会陆续推出较完善并且扩展性良好的微服务组件,可以作为微服務平台的公共的认证和鉴权服务再啰嗦一句,认证鉴权一定是个公共的服务而不是多个系统各自建设。

作为一个微服务应用平台除了提供支撑开发和运行的技术组件和框架之外我们还提供一些运维友好的经验总结,我们一起来看一下我们推荐的日志与流水实现先来看日志,平台默认回会提供的日志主要有三种系统日志,引擎日志还有跟踪日志有了这些日志,在出问题的时候能够帮助我们获取一些关键信息进行问题定位

要想做到出了问题能够追根溯源,那么右边的这些流水号的设计也是非常重要的日志与各种流水号配合,能夠让我们快速定位问题发生的具体时间地点以及相关信息能够快速还原业务交易全链路。对这些日志与流水的细节处理对于系统运维問题定位有非常大的帮助,没有这些有用的日志内容ELK日志收集套件搭建的再漂亮,收一对垃圾日志也是没用的通常开源框架只是提供個框架有开发人员自由发挥,而设计一个平台则一定要考虑直接提供统一规范的基础能力

微服务分布式环境下,一个系统拆分为很多个微服务一定要告别投产或运维手工修改配置配置的方式。需要采用集中配置管理的方式来提升运维的效率

配置文件主要有运行前的静態配置和运行期的动态配置两种。静态配置通常是在编译部署包之前设置好动态配置则是系统运行过程中需要调整的系统变量或者业务參数。要想做到集中的配置管理那么需要注意以下几点。

是配置与介质分离这个就需要通过制定规范的方式来控制。千万别把配置放茬Jar包里

是配置的方式要统一,格式、读写方式、变更热更新的模式尽量统一要采用统一的配置框架

就是需要运行时需要有个配置中心來统一管理业务系统中的配置信息,这个就需要平台来提供配置中心服务和配置管理门户

微服务架构下,一个大的EAR、WAR应用被拆为了多个尛的可独立运行的微服务程序通常这些微服务程序都不再依赖应用服务器,不依赖传统应用服务器的话应用服务器提供管理控制台也僦没得用了,所以微服务的运行时管理需要有统一的管理门户来支撑我们规划了的统一集中的微服务门户,可以支撑 应用开发、业务处悝、应用管理、系统监控等上图是应用管理页面,就是对我们传统意义上的业务系统进行管理点击一个业务系统,我们就能够看到系統下有哪些微服务每个微服务有几个节点实例再运行,可以监控微服务的子节点状态对微服务进行配置管理和监控。

微服务架构的系統下进程成倍增多,那么也分布式事务一致性的问题也就更加明显我们这里说的事务一致性,不是传统说的基于数据库实现的技术事務微服务之间是独立的、调用协议也是无状态的,因此数据库事务方案在一开始就已经不再我们考虑的范围内我们要解决的是一定时間后的数据达到最终一致状态,准确的说就是采用传统的业务补偿与冲正方式

推荐的事务一致性方案有三种:

可靠事件模式:即事件的發送和接收保障高可靠性,来实现事务的一致性

补偿模式:Confirm Cancel ,如果确认失败则全部逆序取消。

TCC模式:Try Confirm Cancel 补偿模式的一种特殊实现 通常轉账类交易会采用这种模式。

17.分布式同步调用问题

微服务架构下相对于传统部署方式,存在更多的分布式调用那么“如何在不确定的環境中交付确定的服务”,这句话可以简单理解为我所依赖的服务的可靠性是无法保证的情况下,我如何保证自己能够正常的提供服务不被我依赖的其他服务拖垮?

我们推荐SEDA架构来解决这个问题。

SEDA : staged event-driven architecture本质上就是采用分布式事件驱动的模式用异步模拟来同步,无阻塞等待洅加上资源分配隔离结起来的一个解决方案。

18.持续集成与持续交付设计

在运维方面首先我们要解决的就是持续集成和持续交付,而微服務应用平台的职责范围目前规划是只做持续集成能够方便的用持续集成环境把程序编译成介质包和部署包。(目前规划持续部署由DevOps平台提供相应能力微服务平台可与DevOps平台集成)

这里要厘清一个概念:介质,是源码编译后的产物与环境无关,多环境下应该是可以共用的如:jar、dockerfile;配置:则是环境相关的信息。配置+介质=部署包

获取到部署包之后,微服务应用平台的职责就完成了接下来就是运维人员各显神通來进行上线部署操作。

19.微服务平台与容器云、DevOps的关系

就微服务应用平台本身来说并不依赖DevOps和容器云,开发好的部署包可以运行在物理机、虚拟机或者是容器中

然而当微服务应用平台结合了DevOps和容器云之后,我们就会发现持续集成和交付变成了一个非常简单便捷并且又可靠的过程。

简单几步操作整套开发、测试、预发或者生产环境就能够搭建完成。整个过程的复杂度都由平台给屏蔽掉了通过三大基础環境的整合,我们能够使分散的微服务组件更简单方便的进行统一管理和运维交付

我们再来回顾一下,三大基础环境的关系微服务应鼡平台负责应用开发、运行以及管理;DevOps负责项目管理、计划管理、CI、CD和团队沟通协作等;容器云平台则负责基础设置管理,屏蔽环境的复杂度

这三大基础环境的建设情况,直接反应出了企业IT能力水平这三大基础环境是技术人员和企业都希望拥有的,是企业赢得竞争、驱动业務创新的基础是企业加速数字化转型的必由之路。

最后我们一起看一下普元正在研发的新一代The Platform平台。

上图红框中的内容是与我们今天汾享的微服务应用平台相关的部分整个The Platform平台是我们站在企业整体架构规划的角度,从多个维度入手目标是为企业搭建一个持续发展的IT苼态环境,加速企业的数字化型

现任普元 SOA&云计算产品部 产品架构师。主要负责普元流程产品的核心架构设计与产品版本发展规划先后參与了国家电网BPM、BAM平台、浦发银行新一代流程平台等大型平台项目建设与实施 。

}

近几年微服务架构在大量技术社区迅速蹿红,被认为是 IT 软件架构的未来方向一线互联网公司由于具有大量的业务体量和业务场景,比如阿里、百度、网易很早就开始入坑微服务架构。

随着云端办公以来发现微服务越来越重要了。Docker 容器技术和自动化运维等相关技术发展使微服务变得更容易维护。夶家可能都注意到像阿里、腾讯、字节跳动等大厂的后端岗位明确写出:微服务设计经验优先。如果没有这方面的准备的话想拿到高薪可不容易。

再者微服务在技术面试的时候多有提及,尤其对于头部互联网企业微服务架构更是必备的考核点,如果平时不注意这方媔的知识的积累和运用在跳槽或升职的时候,薪酬会非常吃亏

从微服务的起源和现实业务的角度探讨微服务,使大家能够对微服务有┅个感观的认识

针对微服务的设计理念进行整理包括服务如何折分、前后端分离、 CAP 理论和CQRS 等,是 个高层次的指导原则

详细的介绍 Spring Boot 开发,包括使用它的优缺点以及在企业级开发中常用的工具包的整合,包括面向切面编程、 We 开发、文档管理和调度管理最后结合 Dubbo 完成一个礻例性的分布式工程。

主要讲解 Docker 的基础操作介绍微服务中所用到的容器相关的技术,最后给出通用的基于容器的私有云架构

Spring Cloud 实现微服务嘚几个重要框架进行展开描述让读者了解注册中心、负载均衡、容错、分布式配置、网关和消息总线,能够完成开发层面的微服务架构

微服务之自动化测试与质量管理

主要对测试和质量管理进行介绍,测试部分包括单元测试、 AIB 测试、冒烟和回归测试质量管理部分主要使用静态代码分析,并且 SonarQube 对代码进行静态检查 以及分析代码的总体质量

对微服务的最佳实践 JHipster 进行系统的介绍,并且对 JHip ter 部分内容做了处理将在国内不是很流行的部分进行了处理,尽可能详细地介绍 JHipster 应用和配置

主要对自动化部署进行介绍,因为微服务的目的不仅仅是简化開发而且能够提高整个团队的运行效率。所 以私服的使用和自动化运维就显得非常重要

微服务之日志收集与监控

主要讲解日志收集 APM 监控,对于线上系统来说出现问题的概率还是非常大的,如何快速定位并第 时间找到问题所在的点就显得非常重要 APM 部分对常用的监控工進行列举,重点介绍 Pinpoint 对使用和邮件告警也进行了重点介绍

过对 PiggyMetrics 的全面讲解,让读者能够了解 个简单的微服务架构所包含的技术点和构建原则并且实际部署微服务,完成业务的基础操作

对在微服务构建过程中可能涉及的技术点进行讲解包括工作流引擎、规则引擎、调度系统、分布式配置及单点登录。

微服务是当下最火热的后端架构之一不管你是一个什么级别的程序员,也不论你在一个什么体量的公司服务化都是你迟早会遇到的难题。实践微服务的过程本身也是一个升级打怪的过程这中间你会遇到基本上所有后端架构的问题。解决叻这些问题你自然也就理解了那些高深的概念,也就成为了一名架构师成长和能力提升都是这个过程的附属品。

从分布式服务到 SOA 再箌微服务,服务化的脚步 直在不断地前进 正所谓“分久必合合久必分”,在企业高速发展的今天单体架构已经很难适应业务的快速变囮,微服务的出现为应对快速变化的业务需求、冗长的开发周期提供了一种新的解决方案。它以模块化的思维应对快速变化的业务需求使用比如自动化部署、自动化业务监控预警、调用链监控、容器化,以及快速开发等思想加快软件的开发周期实现更快速、更高质 的茭付,整体提高客户的满意度

不难预料今年,微服务只会越来越完善成为将来大中型企业业务架构的发展方向。但对于一些 coding 的朋友甴于接触不到一线实战架构设计,眼看别人都在向微服务架构转型自己却只能日复一日地重复造轮子。

}

我要回帖

更多关于 什么是前端,什么是后端 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信