首页 > 其他分享 >我所理解的SOA和微服务

我所理解的SOA和微服务

时间:2023-04-28 17:32:11浏览次数:30  
标签:SOA 架构 框架 业务 理解 应用 服务


SOA和微服务到底是什么关系?

说实话,我确实不明白SOA和微服务到底有什么本质上的区别,两者说到底都是对外提供接口的一种架构设计方式。我倒觉得微服务其实就是随着互联网的发展,复杂的平台、业务的出现,导致SOA架构向更细粒度、更通过化程度发展,就成了所谓的微服务了。以这种说法做为根据,我觉得SOA与微服务的区别在于如下几个方面:

  1. 微服务相比于SOA更加精细,微服务更多的以独立的进程的方式存在,互相之间并无影响;
  2. 微服务提供的接口方式更加通用化,例如HTTP RESTful方式,各种终端都可以调用,无关语言、平台限制;
  3. 微服务更倾向于分布式去中心化的部署方式,在互联网业务场景下更适合;

为什么要使用微服务?

技术为业务而生,架构也为业务而出现,当然SOA和微服务也是因为业务的发展而出现。出现SOA和微服务框架与业务的发展、平台的壮大密不可分,下面借用dubbo的网站架构发展图和说明:

我所理解的SOA和微服务_SOA

  • 单一应用架构
  • 当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。
  • 此时,用于简化增删改查工作量的 数据访问框架(ORM) 是关键。
  • 垂直应用架构
  • 当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,将应用拆成互不相干的几个应用,以提升效率。
  • 此时,用于加速前端页面开发的 Web框架(MVC) 是关键。
  • 分布式服务架构
  • 当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。
  • 此时,用于提高业务复用及整合的 分布式服务框架(RPC) 是关键。
  • 流动计算架构
  • 当服务越来越多,容量的评估,小服务资源的浪费等问题逐渐显现,此时需增加一个调度中心基于访问压力实时管理集群容量,提高集群利用率。
  • 此时,用于提高机器利用率的 资源调度和治理中心(SOA) 是关键。

平台随着业务的发展从 All in One 环境就可以满足业务需求(以Java来说,可能只是一两个war包就解决了);发展到需要拆分多个应用,并且采用MVC的方式分离前后端,加快开发效率;在发展到服务越来越多,不得不将一些核心或共用的服务拆分出来,其实发展到此阶段,如果服务拆分的足够精细,并且独立运行,我觉得就可以将之理解为一个微服务了。

理想中的微服务架构

没有什么东西是完美的,网站架构也是这样的,只有「比之前好一点」的架构或「目前最好的实现方式」,不存在理想中的架构,那么理想中微服务架构应该是怎么样的呢,我觉得至少应该有如下几个特点:

  1. 能支持当前业务需求,当然这只是最最基本的条件;
  2. 每个微服务都要去中心化,不存在单点故障;
  3. 每个微服务都要实现高可用、高负载,不会因为一个服务不可用而影响了整套业务流;
  4. 每个微服务都要高度通用化,即多种终端都可调用,不分语言和平台;
  5. 服务部署或升级简单,不会消耗大量人力并且部署过程不易出现人为错误;
  6. 微服务具有快速注册与自动发现功能(例如dubbo框架)

当然,这只是其中能想到的几点,实际环境中用到的微服务框架有可能会根据实际业务需求优化出更加个性化的功能,也可能有些功能是不需要的。还是那句话,架构是服务于业务的,能快速方便的满足业务需求的架构才是好的架构,才是好的微服务架构。

 

欢迎关注公众号「gushidefengzheng」古时的风筝

我所理解的SOA和微服务_业务需求_02


以上只是个人理解,将自己的理解写出,以备自己查看。

也许我说的并一定对,也许我说的全是错的。

人生没有回头路,珍惜当下。



标签:SOA,架构,框架,业务,理解,应用,服务
From: https://blog.51cto.com/u_15717245/6235041

相关文章

  • Ubuntu搭建MySQL服务器
    Ubuntu安装MySQL使用apt命令安装”sudoapt-getinstallmysql-server“使用mysqladmin命令检查服务器的版本mysqladmin--version登录MySQL服务器(记录密码:17909)mysql-uroot-p('\h'forhelp.Type'\c'toclearthecurrentinputstatement.)Linux系统启动时启动MySQ......
  • 服务百万商家的系统,发布风险如何规避?微盟全链路灰度实践
    一分钟精华速览全链路灰度发布是指在微服务体系架构中,应用的新、旧版本间平滑过渡的一种发布方式。由于微服务之间依赖关系错综复杂,一次发布可能会涉及多个服务升级,所以在发布前进行小规模的生产环境验证,让新版本的应用实例来承接、处理限定规模或范围的业务流量,能最大限度控制发......
  • ArcGIS Pro发布地形高程服务(DEM/DSM)
    在之前的文章介绍过使用ArcMap发布地形服务,由于ArcGIS后续不在更新ArcMap,改用ArcGISPro,本文对ArcGISPro发布地形服务进行说明。使用ArcGISPro发布影像、矢量请跳转:ArcGISPro发布地图服务(影像、矢量)使用ArcMap发布地形请跳转:ArcGISDesktop发布地形高程服务(DEM/DSM)本文示......
  • paramiko遍历嵌套文件夹上传到linux服务器,并执行sh脚本
    场景:由于工作原因,开发打包后都要上传包到对应linux服务器,并执行对应shell脚本,替换包内配置文件,启动服务。换包频率过于频繁,因此需要实现一种不用打开xshell、xftp的方法,直接将包放在本地文件,双击exe运行所有操作,以节省时间,想到使用python的paramiko、pyinstaller模块实现。功......
  • 简单理解Collections.synchronizedList
    转:简单理解Collections.synchronizedListsynchronizedList中的listIterator和listIterator(intindex)方法并没有做同步处理,遍历的时候需要加锁 编译后的class   ......
  • 灾难处理:卸载无法开机(蓝屏)的exchange服务器
    目的:卸载无法开机(蓝屏)的exchange服务器,从AD层面删除图形化界面卸载: 确保exchange03上没有任何的数据库命令行的模式下进行卸载: ......
  • ArcGIS Desktop发布地形高程服务(DEM/DSM)
    在做ArcGIS三维时,地形服务的发布与普通地图服务的发布不一样,需要发布成ImageServer,切片格式选择LERC。本文示例使用软件:ArcGISDesktop10.3.1注:ArcGIS在10.3.1以上版本才支持发布地形服务。1、根据需要选择对应坐标系的地形数据,地形数据一般格式为tif或者imgArcGIS存在两种模......
  • Linux开机启动服务配置
     chkconfig命令可以管理在7个不同级别下是否启动某个服务,建议manchkconfig,这是一个普通但必须掌握的命令。1、使用chkconfig--list命令观察ftp的启动状态,按照你的描述,应该是在35级别启动了。(若一页显示不完,可结合catmoreless之类的命令,或者利用管道符加grep过滤出vsft......
  • nginx启动服务脚本
    #chkconfig:3456060#!/bin/bash#nginxStartupscriptfortheNginxHTTPServer#itisv.0.0.2version.#chkconfig:-8515#description:Nginxisahigh-performancewebandproxyserver.#Ithasalotoffeatures,butit'snotfo......
  • Linux中将memcached注册成服务并可以随机器启动时启动服务
    网上看了很多资料大多比较繁琐,而且很多不能再最新的centos6上执行成功,最后还是自己写了一份,以供日后备用:  1.首先是写service脚本service脚本需要进入到目录/etc/init.d中,然后touchmemcached,最后vimmemcached后进行脚本编写,脚本如下:#chkconfig:3456060#!/bin/bash......