从零开始学spring cloud(一) -------- spring cloud 简介

1.微服务简介

1.1.单体架构

 


一个归档包(例如war格式)包含了应用全部功能的应用程序,咱们一般称之为单体应用。架构单体应用的方法论,咱们称之为单体应用架构。

缺点:
1. 复杂性高
以笔者经手的一个百万行级别的单体应用为例,整个项目包含的模块很是多,模块的边界模糊,依赖关系不清晰,代码质量良莠不齐,混乱地堆砌在一块儿……整个项目很是复杂。每次修改代码都心惊胆战,甚至添加一个简单的功能,或者修改一个BUG都会形成隐含的缺陷。

2. 技术债务
随着时间推移、需求变动和人员更迭,会逐渐造成应用程序的技术债务,而且越积越多。“不坏不修(Not broken,don’t fix)”,这在软件开发中很是常见,在单体应用中这种思想更甚。已使用的系统设计或代码难以修改,由于应用程序的其余模块可能会以意料以外的方式使用它。

3. 部署频率低
随着代码的增多,构建和部署的时间也会增长。而在单体应用中,每次功能的变动或缺陷的修复都会致使咱们须要从新部署整个应用。全量部署的方式耗时长、影响的范围大、风险高,这使得单体应用项目上线部署的频率较低。而部署频率低又致使两次发布之间会有大量的功能变动和缺陷修复,出错几率比较高。

4. 扩展能力受限
单体应用只能做为一个总体进行扩展,没法结合业务模块的特色进行伸缩。例如,应用中有的模块是计算密集型的,它须要强劲的CPU;有的模块则是IO密集型的,须要更大的内存。因为这些模块部署在一块儿,咱们不得不在硬件的选择上作出妥协。

5. 阻碍技术创新
单体应用每每使用统一的技术平台或方案解决全部问题,团队的每一个成员都必须使用相同的开发语言和框架,想要引入新的框架或技术平台会很是困难。例如,一个使用Struts 2构建的、100万行代码的单体应用,若是想要换用Spring MVC,切换成本无疑是很是高的。
数据库

1.2.微服务架构

简而言之,微服务架构风格这种开发方法,是以开发一组小型服务的方式来开发一个独立的应用系统的。其中每一个小型服务都运行在本身的进程中,并常常采用HTTP资源API这样轻量的机制来相互通讯。这些服务围绕业务功能进行构建,并能经过全自动的部署机制来进行独立部署。这些微服务可使用不一样的语言来编写,而且可使用不一样的数据存储技术。对这些微服务咱们仅作最低限度的集中管理。

微服务特性:
从中咱们能够看到,微服务架构应具有如下特性:
1. 每一个微服务可独立运行在本身的进程里;
2. 一系列独立运行的微服务共同构建起整个系统;
3. 每一个服务为独立的业务开发,一个微服务只关注某个特定的功能,例如订单管理、用户管理等;
4. 微服务之间经过一些轻量的通讯机制进行通讯,例如经过REST API进行调用;
5. 可使用不一样的语言与数据存储技术;
6. 全自动的部署机制。网络

1.3.微服务架构的优势与挑战

1.3.1.微服务架构的优势

1. 易于开发和维护 一个微服务只关注一个特定的业务功能,因此它的业务清晰、代码量较少。开发和维护单个微服务相对是比较简单的。而整个应用是由若干个微服务构建而成的,因此整个应用也会维持在可控状态。

2. 单个微服务启动较快
单个微服务代码量较少,因此启动会比较快。

3. 局部修改容易部署
单体应用只要有修改,就得从新部署整个应用,微服务解决了这样的问题。通常来讲,对某个微服务进行修改,只须要从新部署这个服务便可。

4. 技术栈不受限
在微服务中,咱们能够结合项目业务及团队的特色,合理地选择技术栈。例如某些服务可以使用关系型数据库MySQL;某些微服务有图形计算的需求,咱们可使用Neo4J;甚至能够根据须要,部分微服务使用Java开发,部分微服务使用NodeJS进行开发。

5. 按需伸缩
咱们能够根据需求,实现细粒度的扩展。例如:系统中的某个微服务遇到了瓶颈,咱们能够结合这个微服务的业务特色,增长内存、升级CPU或者是增长节点。
架构

1.3.2.微服务架构的挑战


1. 运维要求较高
更多的服务意味着更多的运维投入。在单体架构中,只须要保证一个应用的正常运行;而在微服务中,须要保证几十甚至几百个服务的正常运行与协做,这给项目的运维带来了很大的挑战。

2. 分布式固有的复杂性
使用微服务构建的是分布式系统。对于一个分布式系统,系统容错、网络延迟、分布式事务等都给咱们带来了很大的挑战。

3. 接口调整成本高
微服务之间经过接口进行通讯。若是修改某一个微服务的API,可能全部使用了该接口的微服务都须要作调整。

4. 重复劳动
不少服务可能都会使用到相同的功能,而这个功能并无达到分解为一个微服务的程度,这个时候,可能各个服务都会开发这一功能,从而致使代码重复。框架

1.4.微服务设计原则

1.单一职责原则
ref:
https://en.wikipedia.org/wiki/SOLID_(object-oriented_design)

2.服务自治原则
服务自治,是指每一个微服务应该具有独立的业务能力、依赖与运行环境。

3.轻量级通讯原则
轻量级的定义指:

4.接口明确原则
每一个服务的对外接口应该明肯定义,并尽可能保持不变。运维

相关文章
相关标签/搜索