最初架构

说明:最初我们架构是垂直的 所有功能都在一个项目里面 随着业务和用户的增长 原来一台服务器已经不能支撑现有的请求数 这个时候我们就需要部署多台服务器

集群模式

说明:我们使用nginx做代理服务器 将请求 根据权重分摊请求到对应的服务器  以及容错 !通过nginx做代理服务器的好处不仅仅能够支持更大的并发数!而且还能在我们某台服务器发生故障的时候不会导致系统瘫痪

我们可以根据并发数适当的增加服务器数量 (但是需要注意的是:我们的nginx也是一台服务器 也会遇到瓶颈 只是内部实现机制与我们的tomcat等服务器不一样 可以支持更多的并发数!还有一个是数据库。虽然我们服务器并发能能够通过增加服务器通过nginx来进行负载均衡的转发请求  但是我们数据库也会遇到瓶颈 这个时候就需要涉及到数据库集群)

需要解决的问题:1.session 共享   2.文件上传  3.缓存共享

1.session共享  主要是解决身份认证   我们传统登录时用户登录成功将会话信息保存session 然后像客户端写入一个cookie  cookie的值就是对应会话的key(浏览器每次发起请求都会将cookie传到服务端 我们在服务端根据身份认证的key  在服务器找是否存在 如果存在 则认为是认证成功 没有则登录失败)    当我们从server1 登录 成功    nginx后面将请求负载到server2  按照我们前面的方式 通过cookie是找不到登录信息的。解决方式 就是登录的时候将身份信息保存到第三方缓存  比如redis 而不是存在服务器内存

2.文件上传 如果我们文件保存到服务器的话   上传负载到server1   下载 负载到server2  则会找不到文件   我们可以通过自己搭建文件服务器 或者购买第三方文件存储中心 七牛或者青云

3.缓存共享 跟上面其实是一致的  如果将缓存存储到server1   第二次请求负载到server2  拿不到缓存  所以也是通过redis解决

4.分布式锁

分布式架构

说明:上面的架构 当我们nginx到达瓶颈之后单纯的增加服务器已经不能解决问题了。这个时候就可以通过拆分系统的粒度 将原来的垂直系统 拆分成各个子系统 每个子系统又可以单独部署集群+nginx

需要解决的问题:

       1.单点登录

       2.session共享

        3.文件上传

        4.缓存共享

5.分布式锁(redis SETNX   或者开源封装好的redisson)

6.分布式事物   当我们将原来的垂直应用拆分成一个个独立的子系统  系统之间需要交互 访问数据库不在一个会话里面或者不是同一个库 就会涉及到分布式事物(多个系统之间的交互如何保证一致性)

7.运维方面带来的难度  因为各个子系统间相互调用都是静态链接不利于维护  对外暴露接口的开发工作 以及各个子系统对外暴露服务的接口认证重复开发

基于微服务架构

说明:1.各个服务间相互调用  通过将自己现有服务注册到注册中心进行统一管理!并将自己依赖的服务通过自动发现从注册中心订阅下来 通过rabbion在客户端做负载均衡

2.通过网关统一的将服务从注册中心订阅下来 并做统一的认证处理  外部调用 统一访问网关

3.配置中心   各个服务都有自己单独的配置 配置的刷新和配置都要到每个服务项目进行配置增加运维的复杂性。通过配置中心统一进行配置冰注册到注册中心 各个服务启动加载自己所属配置进行初始化  配置中心还可以对敏感数据 进行加密 比如数据库链接

需要解决的问题:单点登录 分布式事物  分布式锁 session共享  文件共享

随着服务增加 我们发布服务也增加了复杂度 可以通过jenkins 来对服务进行发布

Spring Cloud-个人理解的微服务演变过程(一)的更多相关文章

  1. 手把手教你使用spring cloud+dotnet core搭建微服务架构:服务治理(-)

    背景 公司去年开始使用dotnet core开发项目.公司的总体架构采用的是微服务,那时候由于对微服务的理解并不是太深,加上各种组件的不成熟,只是把项目的各个功能通过业务层面拆分,然后通过nginx代 ...

  2. spring cloud+dotnet core搭建微服务架构:Api授权认证(六)

    前言 这篇文章拖太久了,因为最近实在太忙了,加上这篇文章也非常长,所以花了不少时间,给大家说句抱歉.好,进入正题.目前的项目基本都是前后端分离了,前端分Web,Ios,Android...,后端也基本 ...

  3. spring cloud+.net core搭建微服务架构:服务注册(一)

    背景 公司去年开始使用dotnet core开发项目.公司的总体架构采用的是微服务,那时候由于对微服务的理解并不是太深,加上各种组件的不成熟,只是把项目的各个功能通过业务层面拆分,然后通过nginx代 ...

  4. spring cloud+.net core搭建微服务架构:Api授权认证(六)

    前言 这篇文章拖太久了,因为最近实在太忙了,加上这篇文章也非常长,所以花了不少时间,给大家说句抱歉.好,进入正题.目前的项目基本都是前后端分离了,前端分Web,Ios,Android...,后端也基本 ...

  5. 从 Spring Cloud 开始,聊聊微服务架构实践之路

    [编者的话]随着公司业务量的飞速发展,平台面临的挑战已经远远大于业务,需求量不断增加,技术人员数量增加,面临的复杂度也大大增加.在这个背景下,平台的技术架构也完成了从传统的单体应用到微服务化的演进. ...

  6. 【Spring Cloud学习之一】微服务架构

    一.网站架构模式发展 单体应用-->SOA-->微服务 1.分布式项目与项目集群分布式项目:根据业务需求进行拆分成N个子系统,多个子系统相互协作才能完成业务流程子系统之间通讯使用RPC远程 ...

  7. Spring Cloud Alibaba+Nacos搭建微服务架构

    1. Spring Cloud Alibaba 简介    Spring Cloud Alibaba是阿里巴巴为分布式应用提供的一站式解决方案,能够更方便快捷地搭建分布式平台,nacos拥有着替换eu ...

  8. 【译文】用Spring Cloud和Docker搭建微服务平台

    by Kenny Bastani Sunday, July 12, 2015 转自:http://www.kennybastani.com/2015/07/spring-cloud-docker-mi ...

  9. spring cloud+dotnet core搭建微服务架构:服务发现(二)

    前言 上篇文章实际上只讲了服务治理中的服务注册,服务与服务之间如何调用呢?传统的方式,服务A调用服务B,那么服务A访问的是服务B的负载均衡地址,通过负载均衡来指向到服务B的真实地址,上篇文章已经说了这 ...

随机推荐

  1. 源码中修改Android的开机画面和动画【转】

    本文转载自:http://blog.csdn.net/dddxxxx/article/details/54343976 参照文章:http://blog.csdn.net/a345017062/art ...

  2. linux端口号与PID的互相查询

    最近用linux在玩Tomcat,启动的时候总是会报错(8080/8009/8005) 于是整理了一下网上零乱的查看PID和端口的命令,以备记录. 1.由端口号查询PID号 首先myeclipse报错 ...

  3. 深度学习必备:随机梯度下降(SGD)优化算法及可视化

    补充在前:实际上在我使用LSTM为流量基线建模时候,发现有效的激活函数是elu.relu.linear.prelu.leaky_relu.softplus,对应的梯度算法是adam.mom.rmspr ...

  4. CockroachDB——类似spanner的开源版,底层使用rocksdb存储,mvcc,支持事务,raft一致性,licence是CockroachDB Community License Agreement

    摘自:https://github.com/cockroachdb/cockroach/blob/master/docs/design.md CockroachDB is a distributed ...

  5. bzoj 4198 [ Noi 2015 ] 荷马史诗 —— 哈夫曼编码(k叉哈夫曼树)

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4198 第一次写哈夫曼树!看了很多博客. 哈夫曼树 & 哈夫曼编码:https://w ...

  6. 84. ExtJS下页面显示中文乱码问题

    转自:https://blog.csdn.net/wenminhao/article/details/51198981 最近在学校extjs是,使用js脚本显示中文在html页面中时,中午出现了乱码的 ...

  7. leetcode二分查找相关

    目录 33/81搜索旋转排序数组 34在排序数组中查找元素的第一个和最后一个位置 35搜索插入位置 74搜索二维矩阵 300最长上升子序列,354俄罗斯套娃信封问题 33/81搜索旋转排序数组 假设按 ...

  8. Android常见错误整理

    1.当我new class的时候,提示以下错误: Unable to parse template "Class" Error message: This template did ...

  9. [原创]Linux(CentOS)下安装mongodb

    和上一篇一样,装个这个踩了无数个坑…… 1.下载 wget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel55-3.2.12.tgz ...

  10. Excel的用到的常规的技巧

    这几天在做各种发票的报表,好几百的数据当然离不开EXCel,自己又是个白班,就记录下啦! EXCEL 判断某一单元格值是否包含在某一列中 就在Excel的表格中加入这个函数:=IF(ISERROR(V ...