Spring架构-01-微服务架构
一、单体架构
- 所有功能,所有模块都耦合在一个系统里面,如传统的一MVC。 需要重新编译测试,重新部署。
- 伸缩性差
- 可靠性差
- 系统迭代困难
- 跨开发语言程序低
- 团队协作麻烦
二、微服务架构
常见架构风格:
- C/S
- B/S
- 基于组件的架构
- 分层架构
- 面向服务的架构 SOA
微服务, 是一种架构风格;
- 是系统1对多服务
- 每个服务独立部署
- 每个服务高内聚(每一个服务只做一件事)
- 服务间低耦合
优点
- 服务独立,可以独立测试与部署
- 服务水平扩展容易
- 服务松耦合,不会因某个BUG,而导致整个系统宕机
- 小团队开发, 不同团队分开开发, 迭代方便
- RESTFUL接口, 语言无关。
- 团队按微服务配置, 团队合作方便
缺点
- 运维成本高
- 接口需要兼容多个版本
- 分布式系统的复杂性
- 分布式事务
三、MVC、RPC、SOA微服务架构区别
MVC
idea 试错, 快速验证, 简单快速上线。
JAVA系列,常用STRUCT/SPRINGMVC/MYBATIS等
RPC
解体单上述的单体架构,抽取核心服务,独立关键技术。
Trift/Avro/Hessian/Protobuf/
Thrift开源跨语言接口。
Avro RPC接口
SOA
多了一个ESB中介服务。
微服务
上述出现了问题是, 服务太多,如何管理。ESB过度到了zk/eureka(注册中心)。
四、如设计服务,如何分解
拆分原则 AKF扩展立方体
Y轴(功能): 就是按功能,按业务拆分
X轴(水平扩展): 就是同一个服务运行多个实例, 做个集群加负载均衡
Z轴(数据分区): 基于类型的数据分区,如果用户所有区域。重庆,成都各一个集群。
前后端分离
就是把前后端的代码分离, 物理分离, 只用接口和模型。如前端可以用MVVM架构,和后端只是简单RESTFUL接口。
无状态服务
对于无状态服务, 首先说一下什么是状态, 如果一个数据需要被多个服务共享,才能完成一笔交易, 那么这个数据被称为状态, 进而依赖这个“状态”数据的服务被称为有状态服务, 反之称为无状态服务。
真实意思,就是把有状态业务改变成为状态无关的计算服务, 数据迁移到分布式缓存中存储, 让业务服务变成了一个无状态的计算节点。这样就可以做水平扩展了。动态添加与删除节点。不再需要考虑数据同步的问题了。
RESTFULL 无状态通信
- HTTP,扩展能力强,可以扩展成HTTPS
- 行业通用
Spring架构-01-微服务架构的更多相关文章
- Spring Cloud构建微服务架构(一)服务注册与发现
Spring Cloud简介 Spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中的配置管理.服务发现.断路器.智能路由.微代理.控制总线.全局锁 ...
- 一文读懂 Spring Boot、微服务架构和大数据治理三者之间的故事
微服务架构 微服务的诞生并非偶然,它是在互联网高速发展,技术日新月异的变化以及传统架构无法适应快速变化等多重因素的推动下诞生的产物.互联网时代的产品通常有两类特点:需求变化快和用户群体庞大,在这种情况 ...
- Spring Cloud构建微服务架构(二)服务消费者
Netflix Ribbon is an Inter Process Communication (IPC) cloud library. Ribbon primarily provides clie ...
- Spring Cloud构建微服务架构:服务网关(路由配置)【Dalston版】
转载:http://blog.didispace.com/spring-cloud-starter-dalston-6-2/ 原创 2017-08-26 翟永超 Spring Cloud 被围观 ...
- Cola Cloud 基于 Spring Boot, Spring Cloud 构建微服务架构企业级开发平台
Cola Cloud 基于 Spring Boot, Spring Cloud 构建微服务架构企业级开发平台: https://gitee.com/leecho/cola-cloud
- Spring Cloud构建微服务架构(五)服务网关
通过之前几篇Spring Cloud中几个核心组件的介绍,我们已经可以构建一个简略的(不够完善)微服务架构了.比如下图所示: 我们使用Spring Cloud Netflix中的Eureka实现了服务 ...
- Spring Cloud构建微服务架构 - 服务网关
通过之前几篇Spring Cloud中几个核心组件的介绍,我们已经可以构建一个简略的(不够完善)微服务架构了.比如下图所示: alt 我们使用Spring Cloud Netflix中的Eureka实 ...
- Spring Cloud搭建微服务架构----文章汇总
Spring Cloud搭建微服务架构----前言 原文地址:https://my.oschina.net/u/1000241/blog/882929 Spring Cloud搭建微服务架构----使 ...
- Spring Cloud构建微服务架构
Dalston版本 由于Brixton和Camden版本的教程已经停止更新,所以笔者计划在2017年上半年完成Dalston版本的教程编写(原计划完成Camden版本教程,但由于写了两篇Dalston ...
- Spring Cloud构建微服务架构(三)消息总线
注:此文不适合0基础学习者直接阅读,请先完整的将作者关于微服务的博文全部阅读一遍,如果还有疑问,可以再来阅读此文,地址:http://blog.csdn.net/sosfnima/article/d ...
随机推荐
- NPM版本号
使用NPM下载和发布代码时都会接触到版本号.NPM使用语义版本号来管理代码,这里简单介绍一下. 语义版本号分为X.Y.Z三位,分别代表主版本号.次版本号和补丁版本号.当代码变更时,版本号按以下原则更新 ...
- Ajax请求中的async:false/true的作用【转载】
[Ajax请求中的async:false/true的作用] 作者:https://www.cnblogs.com/mmzuo-798/p/7098979.html 前言: 昨天在做倒计时修改的时候,发 ...
- vue组件生命周期详解
Vue所有的生命周期钩子自动绑定在this上下文到实例中,因此你可以访问数据,对属性和方法进行运算.这意味着你不能使用箭头函数来定义一个生命周期方法.这是因为箭头函数绑定了父上下文,因此this与你期 ...
- php获取当月天数及当月第一天及最后一天
1.获取上个月第一天及最后一天. echo date('Y-m-01', strtotime('-1 month')); echo "<br/>"; ech ...
- python3练习-装饰器
在廖雪峰的官方网站学习装饰器章节时,初步理解类似与面向切面编程.记录一下自己的课后习题解法. 问题: 请编写一个decorator,能在函数调用的前后打印出'begin call'和'end call ...
- linux shell 编程参考
#!/bin/bash my_fun() { echo "$#" } echo 'the number of parameter in "$@" is '$(m ...
- SRAM、DRAM、SDRAM、DDR、DDR2、DDR3
RAM可分为SRAM(Static RAM/静态存储器)和DRAM(Dynamic RAM/动态存储器).SRAM是利用双稳态触发器来保存信息的,只要不掉电,信息是不会丢失的.SRAM存储元件所用MO ...
- Java使用wait() notify()方法操作共享资源
Java多个线程共享资源: 1)wait().notify()和notifyAll()方法是本地方法,并且为final方法,无法被重写. 2)调用某个对象的wait()方法能让当前线程阻塞,并且当前线 ...
- 将一个xml文件解析到一个list中
public List<News> getListFromXml(InputStream in) { XmlPullParser parser = Xml.newPullParser(); ...
- JavaScript -基础- 函数与对象(四) BOM 对象
一.BOM对象 BOM游览器对象模型,可以与游览器对话 BOM下Window对象最重要,还有history.location对象 二.Window对象方法 1.alert提示框 2.confirm c ...