本篇参考总结

  1. IT老齐的学习笔记 原视频
  2. SOA面向服务架构 原视频
  3. 智慧城市实践指南 (书籍-SOA概述)

最近我在负责研发智慧园区的智慧平台产品,目前需求阶段和设计阶段已经完成,正式开始开发阶段,但是作为一个算法类学习者,对于开发框架确实不够了解。作为甲方,也不想让乙方觉得我很傻hhh,特此来做一些学习和梳理,全篇都是小白的白话文,如果有任何问题,欢迎各位大佬及时提出意见!

单点架构、应用集群架构、服务化架构、SOA、微服务到底有什么联系和关系?

一、单点架构和应用集群架构

单点架构强调快速价值交付,主要是通过把计算机所有的应用程序部署到同一台服务器上面/应用程序单体运行,能够实现基础的业务,适用于中小型小型项目,交付快,成本低。

1.1 单点架构存在的问题

“鸡蛋放在一个篮子里面”。因为所有的东西都是单个服务器/物理机上面,所以会存在容错性很糟糕的现象,会容易一个地方崩溃整个系统都不能使用,同时由于所有的东西都堆在一起,增删查改的效率也很低。

1.2 应用集群架构

为了解决单点架构的问题从而引入了集群架构,通过部署应用集群,部署分布式的缓存,能够实现数据库高可用HA/读写分离改造。应用集群架构主要是通过一系列的冗余的节点为系统提供可用性。应用集群架构是大系统进行全量部署(主从数据一致,大系统全量部署,完整的系统应用),单点挂掉了是不会让系统成为整体性的崩溃的。

应用集群架构所有的业务都放在一个应用里面,如果需要对某一个小的业务板块进行更新升级,需要协调整个板块,可以看出来属于技术驱动而不是业务驱动。改进的思路需要对单个整模块切分形成小的单点模块,同时以业务驱动系统,基于此就有了服务化架构。

二、服务化架构、SOA、微服务

2.1 服务化架构

服务化架构就是对业务进行拆分,不同的业务进行独立部署。服务化架构主要以业务为核心,技术怎么落地有两种选型:以ESB企业服务总线(SOA)、微服务架构

2.1.1 SOA概念

在没有提出微服务之前,我们的业务系统能力集成出现问题,单点集群和多点集群都是以技术的角度来开发,不明白业务逻辑,同时整个系统呈现烟囱式(简单来说就是的独立管理,所以出现了SOA的概念,也就是面向业务的架构。

SOA:service oriented architecture 面向服务的架构
“服务”:通过规范的描述来表征,对外提供访问地址,并可被重复使用的业务单元
“面向服务”:通过一组有联系的服务的组合和集成对软件系统进行分析,设计和实现的思想,就跟面向对象一样,面向对象是很多属性的集合成了一个个体,也就是对象,面向服务也是有各类服务集成的系统。
“面向服务的体系架构(SOA)”:遵循面向服务原则,具有松耦合特征的体系结构风格
从应用的角度来说,SOA作为一种IT系统和软件的体系结构规划和构建方法,贯穿IT系统规划、设计、构建和管理的各个阶段,并通过web服务,REST(其实有很多理解,初步的话我就简单的理解成一种通信方式)等技术来实现

企业服务总线如下图所示,设计理念就是以SOA为服务模式,

设计理念:将我们所有的外围系统接入到一个专用产品,也就是ESB(Enterprise Service Bus)


看下面的ESB架构图,可以看到在开发上形成一个共识,没有形成统一标准,在进行协议传输的适合,有的使用web serive,有的使用smtp,所以各个系统交互的时候就会显得特别麻烦,所以ESB就出现了。
ESB作为最核心的中枢,可以转换协议,实现标准化,分发端口等,可以看出来ESB承载了太多了,所有的协议都要通过它去转化,因此ESB也是非常重量级的。

2.1.2 SOA缺点

SOA的核心产品就是ESB,这个模式很快就没有使用了,因为成本很高,同时SOA各个子系统之间没有采用统一的通信标准,想要进行转换会特别的复杂,导致了系统间通信与数据交互之间变得异常复杂。


基于ESB过于“重”的问题,我们引入了微服务的架构标准,没有微服务之前,首先要明白的就是SOA它的价值,是为了找到当前遗留系统的复用的能力,不要盲目的进行微服务的使用,要思考自己本身的业务板块是否可以复用,SOA的三个特征就是“可复用”、“结耦”、“灵活组装”通过思考好了业务,再去思考编排流程BPM和上层的服务逻辑,不要造成太大的资源浪费!

2.1.3 微服务

微服务将单个应用程序开发为一组小型服务的方法,让每个小服务运行在自己的进程中,以轻量级(http等)的方法进行通信,这些服务是围绕业务形成的,由完全自动化的部署机构独立运行,用不同的编程语言编写。它解决了ESB统一标准的问题,现在最主流的就是用java语言编写的Sping Cloud。

有了标准之后大家在开发的时候就可以自发的完成的作业,用相同的规则去进行开发,服务之间我们通过API进行调用,服务提供的API是需要进行标准化的,但是每个服务本身是可以进行多元化的(可以使用不同的数据库),目前微服务架构也是分布式系统开发最常用的方式。