微服务-简介
1、引言
最近几年,微服务架构是相当的火,如果你是做技术的,不谈谈微服架构务感觉地位一下被拉低了。要了解微服务,我们就要必须先明了如下几点:
1、相对于谁?-单体架构
2、微服务与微服务架构区别
3、单体架构与微服务架构应用场景,各有什么特点
4、微服务架构涉及工具
2、单体架构
单体架构大家最熟悉不过了,也是一般情况下敢常用的,特点是一个打包,到处运行。java web中表现为WAR包,其特点是WAR包中包括了程序需要的所有资源,如JS,CSS,JSP及后台逻辑功能。
2.1单体架构图
从上图所示,单体架构,所有资源与逻辑及数据库都是用的同一套(用同一套原因是可能涉及到集群部署问题),所以开发及部署是很容易的,开发只要理清模块间的依赖关系,部署就是整个应用一起搭建。
3、微服务与微服务架构区别
微服务的概念在此就不在累述了,大伙自行百度,我理解的是微服务器和模块/组件区别在于:
1、边界不同,其本身不解决技术问题,而是制造了技术问题,微服务就微在边界上,否则和咸鱼没区别。如果没微在边界上,和模块,SOA没什么本质区别,不要以为用了Spring cloud就是微服务了。
2、独立性不同,微完后,这个微服务是可以单独部署的一个应用,可以整个技术栈都是独立的。
微服务架构是一种思想或者大家说的风格,他是把微服务怎么管理的一种思想,如:怎么把应用拆分为一组微服务。让微服务独立运行。微服务间怎么通信等。
4、单体架构与微服务架构应用场景,各有什么特点
事物都有两面性,不分先后,我认为每种思想的出现都有其存在的价值,不能武断的说谁比谁好,或者谁比谁先进,单体架构和微服务架构也一样。其实我们主要是要考虑他们的应用场景,那就需要知道他们每个的特点:
4.1、单体架构特点:
单体架构及扩展
优点:
1、架构相对来说简单,省去了微服务(很多的情况下)间的管理,但是在大型项目中,模块中依赖也是个很麻烦的事情。
2、开发、测试、部署简单,整个项目都在一起。
不足
1、随着时间推移,需求增加,代码量也增加(相对于单个项目),代码阅读和修改难度增加;
2、部署时,水平和垂直扩展无法按需扩展,如有些需要IO密集型的,有些需要CPU密集型的。
3、技术迁移困难。
适用场景:
1、相对小型公司/初创公司,人员不多的,但并不代表大公司不能;
2、需要变化不大的,以维护为主的项目;
3、发布周期长的,如一个月才发布一次版本的。
4.2、微服务架构特点:
微服务架构及扩展
优点:
1、拆分成了许多微服务,每个微服务为独立运行小单元,代码少,逻辑简单,易于维护和修改;
2、多微服务,按业务或者功能要求分配团队,便于分工协作及分配管理;
3、可以按需资源要求扩展,如把IO密集型和CPU等资源不同进行扩展部署。
不足:
1、过度设计,拆分服务过多,管理复杂,调用间也很复杂;
2、定位问题困难;
3、增加了部署的难度,大大增加了运维人员的难度;
4、服务间通信成本增加;
5、分布式事务处理及数据一致性处理需要特殊处理。
适用场景:
1、大型复杂项目并配置有多团队的公司;
2、迭代需要快的项目;
3、高并发的互联网项目;
4、需要异构化不同服务的项目。
在选择时的建议一定要谨慎,确定自身是否真的需要微服务化,如果仅仅是为了微服务而微服务化的话真没必要,其实单体架构只要模块划分分得适当的话,后转化成微服务是相当简单的事情。
5、微服务架构涉及工具
java体系中微服务工具主要是 Dubbo、Spring Cloud与Spring Cloud Alibaba,他们之间的区别后续再说,现在大部分都是spring cloud或者说是从这个工具来学习入门的。
更多请查看: