微服务的学习

微服务

    • 一、什么是微服务?
    • 二、微服务的由来
    • 三、为什么需要微服务?
      • 3.1早期的单体架构带来的问题
          • 1.复杂性逐渐变高
          • 2.技术债务逐渐上升
          • 3.部署速度逐渐变慢
          • 4.阻碍技术创新
          • 5.无法按需伸缩
      • 3.2微服务与单体架构区别
    • 四、微服务的特征
        • 1 单一职责
        • 2 轻量级通信
        • 3 隔离性
        • 4 业务数据数据的独立性
        • 5 技术的多样性
    • 五、微服务开发框架
    • 六、Sprint cloud 和 Sprint boot区别

一、什么是微服务?

  使用一套小服务来开发单个应用的方式,每个服务运行在独立的进程里,一般采用轻量级的通信机制互联,并且它们可以通过自动化的方式部署。

二、微服务的由来

  微服务最早由Martin Fowler与James Lewis于2014年共同提出,微服务架构风格是一种使用一套小服务来开发单个应用的方式途径,每个服务运行在自己的进程中,并使用轻量级机制通信,通常是HTTP API,这些服务基于业务能力构建,并能够通过自动化部署机制来独立部署,这些服务使用不同的编程语言实现,以及不同数据存储技术,并保持最低限度的集中式管理。

三、为什么需要微服务?

  在传统的IT行业软件大多都是各种独立系统的堆砌,这些系统的问题总结来说就是扩展性差,可靠性不高,维护成本高。到后面引入了SOA服务化,但是,由于 SOA 早期均使用了总线模式,这种总线模式是与某种技术栈强绑定的,比如:J2EE。这导致很多企业的遗留系统很难对接,切换时间太长,成本太高,新系统稳定性的收敛也需要一些时间。最终 SOA 看起来很美,但却成为了企业级奢侈品,中小公司都望而生畏。

3.1早期的单体架构带来的问题

1.复杂性逐渐变高

  比如有的项目有几十万行代码,各个模块之间区别比较模糊,逻辑比较混乱,代码越多复杂性越高,越难解决遇到的问题。

2.技术债务逐渐上升

  公司的人员流动是再正常不过的事情,有的员工在离职之前,疏于代码质量的自我管束,导致留下来很多坑,由于单体项目代码量庞大的惊人,留下的坑很难被发觉,这就给新来的员工带来很大的烦恼,人员流动越大所留下的坑越多,也就是所谓的技术债务越来越多。

3.部署速度逐渐变慢

  这个就很好理解了,单体架构模块非常多,代码量非常庞大,导致部署项目所花费的时间越来越多,曾经有的项目启动就要一二十分钟,这是多么恐怖的事情啊,启动几次项目一天的时间就过去了,留给开发者开发的时间就非常少了。

4.阻碍技术创新

  比如以前的某个项目使用struts2写的,由于各个模块之间有着千丝万缕的联系,代码量大,逻辑不够清楚,如果现在想用spring mvc来重构这个项目将是非常困难的,付出的成本将非常大,所以更多的时候公司不得不硬着头皮继续使用老的struts架构,这就阻碍了技术的创新。

5.无法按需伸缩

比如说电影模块是CPU密集型的模块,而订单模块是IO密集型的模块,假如我们要提升订单模块的性能,比如加大内存、增加硬盘,但是由于所有的模块都在一个架构下,因此我们在扩展订单模块的性能时不得不考虑其它模块的因素,因为我们不能因为扩展某个模块的性能而损害其它模块的性能,从而无法按需进行伸缩。

3.2微服务与单体架构区别

  单体架构所有的模块全都耦合在一块,代码量大,维护困难,微服务每个模块就相当于一个单独的项目,代码量明显减少,遇到问题也相对来说比较好解决。

  单体架构所有的模块都共用一个数据库,存储方式比较单一,微服务每个模块都可以使用不同的存储方式(比如有的用redis,有的用mysql等),数据库也是单个模块对应自己的数据库。

  单体架构所有的模块开发所使用的技术一样,微服务每个模块都可以使用不同的开发技术,开发模式更灵活。

四、微服务的特征

1 单一职责

  只把紧密相关的业务放到一起,无关的业务独立出去。比如说订单和支付可以作为一个服务,登陆和注册可以作为一个服务,跟其它业务关系不够紧密的服务就可以作为一个单独的服务,比如说文件服务、短信服务。

2 轻量级通信

  简单来说,轻量级和平台无关,和语言无关。例如http就是一个轻量级通信协议。

3 隔离性

  每个微服务运行在自己的进程中,不会相互的干扰。

4 业务数据数据的独立性

  微服务会倾向于哪个微服务,都有自己的独立的数据存储系统,这样就可以降低数据结构的复杂度。

5 技术的多样性

  微服务可由开发人员选择最适合的技术去实现业务需求,最后只要能够提供出拥有的API就可以了。

五、微服务开发框架

目前微服务的开发框架,最常用的有以下四个:

Spring Cloud:http://projects.spring.io/spring-cloud(现在非常流行的微服务架构)

Dubbo:http://http://dubbo.io

Dropwizard:http://www.dropwizard.io (关注单个微服务的开发)

Consul、etcd&etc.(微服务的模块)

六、Sprint cloud 和 Sprint boot区别

Spring Boot:

旨在简化创建产品级的Spring应用和服务,简化了配置文件,使用嵌入式web服务器,含有诸多开箱即用微服务功能,可以和spring cloud联合部署。

Spring Cloud:

微服务工具包,为开发者提供了在分布式系统的配置管理、服务发现、断路器、智能路由、微代理、控制总线等开发工具包。

你可能感兴趣的:(微服务的学习)