微服务-简介

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或者说是从这个工具来学习入门的。

 

更多请查看:微服务-简介