服务架构一直处于演变之中,为了适合本身的业务,不断的去调整。java
总体的发展历程以下:git
从一个 java 开发者,感觉大概经历了下面几个历程:github
早期,大部分IT系统都是单体系统,例如传统的SSH架构,此时先后端也没有分离,UI组件也包含在了控制层:web
这个也就是老马刚毕业时候的架构,SSH 基本是面试必问。面试
不过如今这些都发生了一些变化,主流已经变成了 spring mvc + spring contaienr + mybatis。spring
只能说,spring,java 界永远的春天!docker
为了方便给系统扩容,以及增长系统的复用性,出现分布式系统。后端
另外一方面,系统模块快速膨胀,为了下降系统内部的复杂度,因而对系统模块进行拆解,分不到不一样的系统中,下降模块耦合,加快迭代速度。springboot
ps: 其实主要是下降单个应用的复杂性,让每个应用专一于一件事情。这样可维护成本大大下降,换言之,开发完后之后,可让一个刚毕业的新人作运维。把开发者裁掉,下降成本。服务器
主流主要是 SOA 和 MSA 两种体系。
早期的分布式系统是基于面向服务的架构SOA。
SOA是微服务的前身,主要是为了摆脱单体应用的问题,达到如下效果:
架构图以下:
异构系统,也能够经过消息中间件的协议转换进行相互调用。
这个我却是接触过一段时间,当时业务系统是 C# 开发,我所在的后端服务使用的是 java 技术开发。当时的协议使用的是 webservice。
可是用起来感受不是很顺畅,主要缺点以下:
(1)WebService中经常使用的SOAP通讯协议,一般使用XML格式进行通讯,数据冗余,协议太重
(2)服务治理很不完善。
后来逐渐演变为了如今的 MSA(Micro-Service Archeticture 微服务架构),从而实现了更加松耦合以及更加灵活的系统。
微服务是一种软件开发技术——面向服务的体系结构(SOA)体系结构样式的变体,它将应用程序构造为松散耦合服务的集合。
在微服务体系结构中,服务是细粒度的,协议是轻量级的。
微服务架构有不少重要的优势。
首先,它解决了复杂性问题。它将单体应用分解为一组服务。虽然功能总量不变,但应用程序已被分解为可管理的模块或服务。
这些服务定义了明确的RPC或消息驱动的API边界。微服务架构强化了应用模块化的水平,而这经过单体代码库很难实现。
所以,微服务开发的速度要快不少,更容易理解和维护。
第三,微服务架构可使每一个微服务独立部署。
最后,微服务架构使得每一个服务均可独立扩展。
如今这种架构模式已经成为主流,我的感觉最深的就是若是你只负责单一服务,你能够把他理解的比较透彻,并且维护起来也没有那么复杂。若是有功能变动,只上线对应的应用便可。
微服务的一些想法在实践上是好的,但当总体实现时也会呈现出其复杂性。
我的感受微服务最大的问题在于系统的拆分以后,很难有一我的能够知道系统的全貌,因此定位问题变得很是复杂。
举个例子,若是交易发生一笔失败,你可能要从API网关=》业务系统=》交易核心=》支付核心=》风控系统问一遍才能知道缘由,最后发现是对底层的系统返回了一个失败,这里涉及到多个系统的沟通成本,基本上半天的时间就没了。
SOA | 微服务架构 |
---|---|
应用程序服务的可重用性的最大化 | 专一于解耦 |
系统性的改变须要修改总体 | 系统性的改变是建立一个新的服务 |
DevOps和持续交付正在变得流行,但还不是主流 | 强烈关注DevOps和持续交付 |
专一于业务功能重用 | 更重视“上下文边界”的概念 |
通讯使用企业服务总线ESB | 对于通讯而言,使用较少精细和简单的消息系统 |
支持多种消息协议 | 使用轻量级协议,例如HTTP,REST或Thrift API |
对部署到它的全部服务使用通用平台 | 应用程序服务器不是真的被使用,一般使用云平台 |
容器(如Docker)的使用不太受欢迎 | 容器在微服务方面效果很好 |
SOA服务共享数据存储 | 每一个微服务能够有一个独立的数据存储 |
共同的治理和标准 | 轻松的治理,更加关注团队协做和选择自由 |
微服务的挑战能够概述以下:
不过幸运的是,不少成熟的中间件,已经为咱们解决了这些问题。
Dubbo 的架构以下:
dubbo 针对 rpc 这部分作的很好,单也仅此而已。
可是为何仍是会这么火爆呢?
不少架构的升级都会有历史包袱,除非你是一家新公司,全新的应用。
大部分的应用都是 spring 或者 springboot 的,因此如今大部分公司都是 springboot + dubbo 的技术选型方案,这样可让架构的平滑的迁移。
若是大家公司是全新的技术选型,能够考虑 spring cloud。
Spring Cloud 架构以下:
你会发现 spring cloud 能够说是 java 技术栈中,比较完善的微服务框架。
固然,spring 再牛,负责的声明周期也只是 jvm 以内,应用的部署运维也是须要考虑的。
每一项技术都有其优点和局限性,因此须要结合使用。
推荐阅读:
Microservice Architectures With Spring Cloud and Docker
目前 docker 虚拟化技术如日中天,结合 k8s 掌托。
我选称这盛世为,喝不起咖啡的打工人,在春天的货船上,996 搬砖!
Service Mesh 也是目前比较火爆的技术,咱们后续进行详解。
技术架构的演进和生物的进化是相似的,物竞天择,适者生存。
学习技术也不能只局限于如今这一刻,要学会去回顾技术的历史,知道为何是这样?若是有能力,也能够引领技术的将来,为何不是这样呢?
我以为本身很幸运,最初接触的是单体应用,是 spring xml 配置的时代。
我以为本身很不幸,框架层出不穷,技术突飞猛进,若是不持续学习,不出 5 年,就会被完全淘汰。
为了避免被那么快淘汰,本系列将从微服务的发展历史,理论知识,入门使用,应用实战,实现原理,重复造轮子等方面,逐渐理解微服务。
我是老马,期待与你,一块儿见证开发者的春天!