SOA和微服务到底是什么关系?
SOA和微服务到底是什么关系?
说实话,我确实不明白SOA和微服务到底有什么本质上的区别,两者说到底都是对外提供接口的一种架构设计方式。我倒觉得微服务其实就是随着互联网的发展,复杂的平台、业务的出现,导致SOA架构向更细粒度、更通过化程度发展,就成了所谓的微服务了。以这种说法做为根据,我觉得SOA与微服务的区别在于如下几个方面:
- 微服务相比于SOA更加精细,微服务更多的以独立的进程的方式存在,互相之间并无影响;
 - 微服务提供的接口方式更加通用化,例如HTTP RESTful方式,各种终端都可以调用,无关语言、平台限制;
 - 微服务更倾向于分布式去中心化的部署方式,在互联网业务场景下更适合;
 
为什么要使用微服务?
技术为业务而生,架构也为业务而出现,当然SOA和微服务也是因为业务的发展而出现。出现SOA和微服务框架与业务的发展、平台的壮大密不可分,下面借用dubbo的网站架构发展图和说明:

- 单一应用架构
- 当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。
 - 此时,用于简化增删改查工作量的 数据访问框架(ORM) 是关键。
 
 - 垂直应用架构
- 当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,将应用拆成互不相干的几个应用,以提升效率。
 - 此时,用于加速前端页面开发的 Web框架(MVC) 是关键。
 
 - 分布式服务架构
- 当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。
 - 此时,用于提高业务复用及整合的 分布式服务框架(RPC) 是关键。
 
 - 流动计算架构
- 当服务越来越多,容量的评估,小服务资源的浪费等问题逐渐显现,此时需增加一个调度中心基于访问压力实时管理集群容量,提高集群利用率。
 - 此时,用于提高机器利用率的 资源调度和治理中心(SOA) 是关键。
 
 
平台随着业务的发展从 All in One 环境就可以满足业务需求(以Java来说,可能只是一两个war包就解决了);发展到需要拆分多个应用,并且采用MVC的方式分离前后端,加快开发效率;在发展到服务越来越多,不得不将一些核心或共用的服务拆分出来,其实发展到此阶段,如果服务拆分的足够精细,并且独立运行,我觉得就可以将之理解为一个微服务了。
理想中的微服务架构
没有什么东西是完美的,网站架构也是这样的,只有「比之前好一点」的架构或「目前最好的实现方式」,不存在理想中的架构,那么理想中微服务架构应该是怎么样的呢,我觉得至少应该有如下几个特点:
- 能支持当前业务需求,当然这只是最最基本的条件;
 - 每个微服务都要去中心化,不存在单点故障;
 - 每个微服务都要实现高可用、高负载,不会因为一个服务不可用而影响了整套业务流;
 - 每个微服务都要高度通用化,即多种终端都可调用,不分语言和平台;
 - 服务部署或升级简单,不会消耗大量人力并且部署过程不易出现人为错误;
 - 微服务具有快速注册与自动发现功能(例如dubbo框架)
 
当然,这只是其中能想到的几点,实际环境中用到的微服务框架有可能会根据实际业务需求优化出更加个性化的功能,也可能有些功能是不需要的。还是那句话,架构是服务于业务的,能快速方便的满足业务需求的架构才是好的架构,才是好的微服务架构。
SOA和微服务到底是什么关系?的更多相关文章
- SOA和微服务到底是什么关系
		
本文原创,原文地址为:http://www.cnblogs.com/fengzheng/p/5847441.html SOA和微服务到底是什么关系? 说实话,我确实不明白SOA和微服务到底有什么本质上 ...
 - 我所理解的SOA和微服务
		
本文原创,原文地址为:http://www.cnblogs.com/fengzheng/p/5847441.html SOA和微服务到底是什么关系? 说实话,我确实不明白SOA和微服务到底有什么本质上 ...
 - SOA和微服务
		
SOA和微服务 SOA和微服务到底是什么关系? 说实话,我确实不明白SOA和微服务到底有什么本质上的区别,两者说到底都是对外提供接口的一种架构设计方式.我倒觉得微服务其实就是随着互联网的发展,复杂的平 ...
 - 「萌新指南」SOA vs. 微服务:What’s the Difference?
		
实话实说,在我还没有实习之前,我是连 SOA 是啥都不知道的,只听说过微服务,毕竟微服务实在太火了,想不知道都难,我觉得实习的时候肯定也是微服务,进组之后发现是 SOA 架构,当时都懵了,看了很多文档 ...
 - 简单聊聊SOA和微服务
		
转自:https://juejin.im/post/592f87feb123db0064e5ef7c (2017-06) 简单聊聊SOA和微服务 架构设计中的朴素主义 前两天和一个朋友聊天,他向我咨 ...
 - SOA与微服务
		
SOA 面向服务架构,它可以根据需求通过网络对松散耦合的粗粒度应用组件进行分布式部署.组合和使用.服务层是SOA的基础,可以直接被应用调用,从而有效控制系统中与软件代理交互的人为依赖性. SOA是一种 ...
 - SOA、微服务与服务网格
		
SOA架构解析 SOA 全称是: Service Oriented Architecture,中文释义为 “面向服务的架构”,它是一种设计理念,其中包含多个服务, 服务之间通过相互依赖最终提供一系列完 ...
 - 面试官灵魂三问:什么是SOA?什么是微服务?SOA和微服务有什么区别?
		
SOA SOA(Service-Oriented Architecture,面向服务的架构)是一种高层级的架构设计理念,可通过在网络上使用基于通用通信语言的服务接口,让软件组件可重复使用. 那么什么是 ...
 - SOA和微服务架构
		
微服务架构强调的第一个重点就是业务系统需要彻底的组件化和服务化,原有的单个业务系统会拆分为多个可以独立开发,设计,运行和运维的小应用.这些小应用之间通过服务完成交互和集成.每个小应用从前端web ui ...
 
随机推荐
- Apache 多网站配置
			
直接看实例就清楚了 Listen 80<VirtualHost *:80> DocumentRoot D:/Server/www ServerAdmin webmaster@lifashi ...
 - sql update set使用case when语句
			
1. update TD_XXXsetdjyzmdm=null,djyzmsj=null,DLCS= case when DLCS is null then 1 else DLCS+1 end whe ...
 - 判断网络类(获取mac) InternetCheck
			
using System; using System.Collections.Generic; using System.Net.NetworkInformation; using System.Ru ...
 - C#多线程编程之:Timer(定时器)使用示例
			
Timer类:设置一个定时器,定时执行用户指定的函数.定时器启动后,系统将自动建立一个新的线程,执行用户指定的函数. 构造函数:Timer(TimerCallback callback, object ...
 - (转)为C# Windows服务添加安装程序
			
本文转载自:http://kamiff.iteye.com/blog/507129 最近一直在搞Windows服务,也有了不少经验,感觉权限方面确定比一般程序要受限很多,但方便性也很多.像后台运行不阻 ...
 - mysql-Innodb事务隔离级别-repeatable read详解(转)
			
一.事务隔离级别 ANSI/ISO SQL标准定义了4中事务隔离级别:未提交读(read uncommitted),提交读(read committed),重复读(repeatable read),串 ...
 - websocket之四:WebSocket 的鉴权授权方案
			
引子 WebSocket 是个好东西,为我们提供了便捷且实时的通讯能力.然而,对于 WebSocket 客户端的鉴权,协议的 RFC 是这么说的: This protocol doesn’t pres ...
 - 设置修改CentOS系统时间和时区
			
1.yum install ntp,安装时间服务ntpdate time-a.nist.gov && hwclock -w (跟网络同步时间,并且写入主板BIos) 2.chkconf ...
 - Golang基础学习总结
			
转自:http://blog.csdn.net/yue7603835/article/details/44264925 1.不支持继承.重载 ,比如C++.Java的接口,接口的修改会影响整个实现改接 ...
 - mysql安装过程及注意事项
			
1.1. 下载: 我下载的是64位系统的zip包: 下载地址:https://dev.mysql.com/downloads/mysql/ 下载zip的包: 下载后解压:D:\软件安装包\mysql- ...