系列文章目录

微服务 | Spring Cloud(一):从单体SSM 到 Spring Cloud



前言

在微服务如火如荼的情况下,越来越多的项目开始尝试改造成微服务架构,微服务即带来了项目开发的方便性,又提高了运维难度以及网络不可靠的概率.

在说微服务的优缺点时,一定要对比一下单体式机构,有对比才会更加明显。

首先说一下单体式结构

单体式架构

在单体式架构中,系统通常采用分层架构模式(MVC),持久化层、表示层,业务逻辑层。架构主要存在以下问题:

  1. 系统内部互相访问,耦合紧密导致难以维护;
  2. 各业务领域需要采用相同的技术栈,难以快速应用新技术(例如使用SSH很难向SSM改造);
  3. 对系统的任何修改都必须整个系统一起重新部署/升级;
  4. 在系统负载增加时,难以进行水平扩展;
  5. 当系统中一处出现问题,会影响整个系统;

在参加第一份工作的时候,因为项目比较小, 用户也比较小,所有的功能写在同一个项目里面,部署的时候也只部署一个实例。简化了开发中遇到的并发问题,同时也完美的命中了上面的一些问题,每次功能上线都需要项目重启。

在常见的方案中,我们可以对服务进行拆分,通过配置域名来进行两个服务间的通信,这样也能减小单个项目的规模,配置域名这种方式费事费力每增加一个服务实例都需要手动配置 Nginx 配置,每增加一个项目,又需要进行域名配置,配置繁琐且容易出错

为了克服以上缺点,微服务架构应运而生。微服务,又叫微服务架构。微服务就是一些协同工作的小而自治的服务.

微服务架构

优点

1. 技术异构性

在不同的服务中,可以使用不同的技术来各自开发,只要保证服务间能相互协作即可

2. 弹性

当微服务中的某一个服务不可用时,不会影响整个系统,只会影响相关功能不可用

3. 扩展

易于扩展,使用小的多个服务,更加易于扩展新的功能

4. 简化部署

某个服务的更新部署,不需要重新部署整个应用

5. 可组合

通过组合多个服务,可以提供一些新的功能

6. 可替代

因为每个微服务都比较小,重新实现某一个服务或者直接删除该服务都是可操作的

缺点

1. 复杂度高

微服务间通过REST、RPC等形式交互,相对于单体模式,需要考虑被调用方故障、过载、消息丢失等各种异常情况,代码逻辑更加复杂。

对于微服务间的事务性操作,因为不同的微服务采用了不同的数据库,将无法利用数据库本身的事务机制保证一致性,需要引入二阶段提交等技术。

同时,在微服务间存在少部分共用功能但又无法提取成微服务时,各个微服务对于这部分功能通常需要重复开发,或至少要做代码复制,以避免微服务间的耦合,增加了开发成本。

2. 运维复杂

在采用微服务架构时,系统由多个独立运行的微服务构成,需要一个设计良好的监控系统对各个微服务的运行状态进行监控。运维人员需要对系统有细致的了解才对够更好的运维系统。

3. 影响性能

相对于单体架构,微服务的间通过REST、RPC等形式进行交互,通信的时延会受到较大的影响。

服务发现与弹性扩展

正如前面介绍单体式架构的那样,当我们想扩展项目的时候,我们可以在单个项目上继续添加功能代码,也可以根据功能创建一个新的项目,并对项目配置域名,然后通过域名来回调用

未完待续

参考

  1. 微服务设计(Sam Newman)

微服务 | Spring Cloud(一):从单体SSM 到 Spring Cloud的更多相关文章

  1. 微服务架构实践 - 你只懂docker与spring boot就够了吗?

    微服务架构实践 - 你只懂docker与spring boot就够了吗? 作者 浮云发发 已关注 2017.02.27 02:50* 字数 2613 阅读 2583评论 6喜欢 35赞赏 2 微服务并 ...

  2. 阶段5 3.微服务项目【学成在线】_day16 Spring Security Oauth2_17-认证接口开发-申请令牌测试

    远程 调用Spring Security来申请令牌,然后把申请到令牌存储到redis里面 cookieMaxAge: ‐1   -1表示浏览器一关闭cookie就失效. 测试远程申请令牌 TestCl ...

  3. 阶段5 3.微服务项目【学成在线】_day16 Spring Security Oauth2_07-SpringSecurityOauth2研究-Oauth2授权码模式-资源服务授权测试

    下面要完成  5.6两个步骤 3.3.4 资源服务授权 3.3.4.1 资源服务授权流程 资源服务拥有要访问的受保护资源,客户端携带令牌访问资源服务,如果令牌合法则可成功访问资源服务中的资 源,如下图 ...

  4. 阶段5 3.微服务项目【学成在线】_day16 Spring Security Oauth2_05-SpringSecurityOauth2研究-搭建认证服务器

    3 Spring Security Oauth2研究 3.1 目标 本项目认证服务基于Spring Security Oauth2进行构建,并在其基础上作了一些扩展,采用JWT令牌机制,并自定 义了用 ...

  5. 阶段5 3.微服务项目【学成在线】_day16 Spring Security Oauth2_04-用户认证技术方案-SpringSecurityOauth2

    2.3 Spring security Oauth2认证解决方案 本项目采用 Spring security + Oauth2完成用户认证及用户授权,Spring security 是一个强大的和高度 ...

  6. 阶段5 3.微服务项目【学成在线】_day16 Spring Security Oauth2_03-用户认证技术方案-Oauth2协议

    2.2 Oauth2认证 2.2.1 Oauth2认证流程 第三方认证技术方案最主要是解决认证协议的通用标准 问题,因为要实现 跨系统认证,各系统之间要遵循一定的 接口协议. OAUTH协议为用户资源 ...

  7. spring cloud微服务快速教程之(十四)spring cloud feign使用okhttp3--以及feign调用参数丢失的说明

    0-前言 spring cloud feign 默认使用httpclient,需要okhttp3的可以进行切换 当然,其实两者性能目前差别不大,差别较大的是很早之前的版本,所以,喜欢哪个自己选择: 1 ...

  8. 阶段5 3.微服务项目【学成在线】_day16 Spring Security Oauth2_12-SpringSecurityOauth2研究-JWT研究-生成私钥和公钥

    3.6.3 JWT入门 Spring Security 提供对JWT的支持,本节我们使用Spring Security 提供的JwtHelper来创建JWT令牌,校验JWT令牌 等操作. 3.6.3. ...

  9. 阶段5 3.微服务项目【学成在线】_day16 Spring Security Oauth2_20-认证接口开发-接口测试

    测试接口 因为继承了spring  security会拦截这个请求,我们需要写代码 让他对这个认证接口放行 查看代码发现之前已经写过放行的代码了 发现是路径前面少了auth 加断点,测试.申请令牌 r ...

随机推荐

  1. react native 常用学习或查资料网址

    react-native facebook官网:http://facebook.github.io/react-native/中文网:http://reactnative.cn/ react 官网地址 ...

  2. 【基础知识】Unity查漏补缺

    最近发现了一些平时不太注重的知识点,特此建立个专题,把零散的东西.疏忽的东西临时记录下来. Mecanim动画系统: 1)设置AnimatorController时,如果某个动作播放不正常. 首先打开 ...

  3. python小白入门基础(四:浮点型和布尔型)

    # Number (int float bool complex)# (1) float 浮点型 也就是小数# 表达方式一floatvar = 0.98print(floatvar)print(typ ...

  4. 索引对单列极值查询的显著性影响(百万级别表单列最值查询 Cost由1405变成3)

    表结构: create table hy_emp( id number(7,0) primary key, name nvarchar2(20) not null, salary number(5,0 ...

  5. python基础 画图

    python 画图 matplotlib 库只保存图片,不显示图片? 在导入库时,添加如下代码 import matplotlib matplotlib.use('Agg')  各种 symbol ? ...

  6. 使用 Promise 实现任务队列发送请求,实现最大请求数目限制

    核心 设置最大请求数量,当前请求数量,待执行队列 调用时,创建一个新任务,然后判断是否达到最大请求数量,若达到则将任务追加到待执行队列,否则,则直接执行该任务.并返回Promise 创建任务时,需要返 ...

  7. Windows+Git+TortoiseGit+COPSSH安装图文教程

    http://blog.csdn.net/aaron_luchen/article/details/10498181/ http://jingyan.baidu.com/article/3a2f7c2 ...

  8. Vue中vue.config的配置

    vue-cli 3.x 脚手架搭建完成后,项目目录中没有 vue.config.js 文件,需要手动在根目录中创建 vue.config.js. vue.config.js 是一个可选的配置文件,如果 ...

  9. 我的Python自学之路-003 字符串的知识

    '''字符串是以引号或者单引号括起来的任意文本,例如"123","asdfjk",'adfa'引号或者单引号,只是一种表示方法,并不是字符串的一部分如果字符串本 ...

  10. docker部署安装zabbix

    安装docker 安装docker需要配置网络yum源,centos7自带的版本太低了 第一步:下载阿里云的docker安装包 在yum仓库的目录之下 [root@localhost yum.repo ...