首页 > 其他分享 >【问题】你用过面向服务架构吗?能否讲讲你对架构的认知。

【问题】你用过面向服务架构吗?能否讲讲你对架构的认知。

时间:2023-08-22 14:37:46浏览次数:50  
标签:SOA ... 服务 讲讲 代码 认知 问题 架构

这个问题有点年头了,那时候面向服务架构(以下简称“SOA架构”)还非常火。现在国内谈微服务架构的比较多 SOA 架构的少,这几年谈微服务架构的也少了,可能是因为企业“降本增效”的缘故吧,大家又重新投入到单体架构的怀抱...

但不可否认的是 SOA 架构还是有它先进性的一面(从 1996 年 Gartner Group 首次提出了“服务导向架构”的概念到现在已经 27 年了),可以说前几年火了一把的微服务架构也是在其基础上延伸的。

我的理解 SOA 架构和微服务架构区别在于,SOA 架构适合大型复杂系统,它可以提高系统的灵活性、可扩展性和可重用性。微服务架构适合快速开发和部署的系统,它可以提高系统的敏捷性和可维护性。再用一句比较好理解的话就是,SOA 架构是“应用”独立服务做分布式,而微服务架构是“功能”独立服务做分布式,这会不会好理解多了。

PS: 天底下哪有这么多大型复杂的系统。特别是最近几年的行情,大家有 idea 都想尽快上线抢占市场,微服务架构无疑是最好的选择。做大做强后实力强劲的就继续延伸拓展,实力没那么强的先单体提供服务即可,只要先赚一笔怎样都可以......

扯远了,回到题目。

嗯...虽然 SOA 架构没用过,但微服务架构却经常用,但随着微服务增多,服务治理是一大难题(里面有太多的坑了,网上大神们都应该有说过),所以我认为一家公司如果是初创公司且公司规模能逐步正向发展的话,那业务架构应该是这样进行演化的:

  1. 单体架构:这时整个系统就是一个应用,直接采用社区版的 MySQL 关系型数据库存数据,用 Redis 做缓存和简单的消息队列即可。

    之后购买一到两台云服务器进行托管,在上面用 Nginx 做反向代理直接部署一套水平的高可用就基本能满足要求。

    创业前期资金流比较重要,不需要加入太多技术栈把系统复杂化。你要想着除了系统外还有一大堆东西需要做,像推广、运营、策划等等这些才是要烧钱的地方。只需做好基础架构的性能调优,快速抢占市场才是王道(大部分初创公司都永远定格在这个阶段,不是技术问题就是管理问题)。


  1. 服务架构:当 UV 、PV 等数据上来后 99 % 会觉得资源不够用了,性能变差了,网络波动了......又恰巧赚了些钱了,心就开始痒痒了。一遇到问题就会想到做水平扩展就好了 =_= ||

    并不是说这种做法是错的,站在业务层面来说,毕竟公司发展还有太多东西需要关注了,能花钱的花钱解决就好,时间就是成本。但站在技术的角度来说,这种做法紧急情况下可以,但缓解压力后我们还是要复盘找到根本原因。 其实这时是全面梳理和审查代码的最好时机,看看还有哪些问题一并解决。若能通过代码修复解决性能问题是最好的,实在不行就只能考虑将某些耗资源的服务拆分成多个实例,通过负载做成资源倾斜的面向服务架构。

    一般来说通过以上方式又可以“再战几年”,但还出现性能瓶颈的话就真的要深入排查一下了(毕竟业务量、访问量、流量数据等数据结合可以粗略推测出压力情况,配合 Dump 分析应该能够知道个大概了)。若不是逻辑处理问题的情况,大概率是存储结构的 IO 性能问题,如果真是这样可以考虑增加 NoSQL来处理非结构化数据,用一些功能强大的 MQ 来实现服务间异步通讯(如:RabbitMQ、Kafka 等等)。

    这个时候其实还不需要全面改变成微服务架构,因为程度还不算严重无需大动干戈。再补充一点,在我的理解里面只有遵循 IBM 提出了 SOA 参考模型的服务架构才能够算是 SOA 架构。不幸的是,目前我遇到过的公司的服务架构都不能称之为 SOA 架构,他们顶多是因为资源问题做水平集群拆分而已...


  1. 微服务架构:当服务架构也不能满足资源要求时只能再进一步分析和拆解(有的小伙伴可能会说加资源就可以了,但是资源是要“钱”的,你再想想你老板的那个抠搜样,总不能够一直加吧...),个人觉得这时可以考虑两步走,第一步清理屎山代码,第二步微服务化。

    这时又有小伙伴会说“屎山代码、祖传代码哪有那么好清理?你以为清理不用成本吗?”其实代码审查(code review)这个事情并不是出问题时才做,开发人员在日常工作中就应该包含这一块定期执行的。目前新版的 Gitlab 就有代码审查功能,其他的像 SonarQube、Spotbugs 等工具都能够很好地做自动化代码扫描,不过这个还是要看各家公司自己的情况,不过实施起来问题不大。

    到这时候数据肯定有一定量级了。数据实时运算就不要再用 MySQL 苦苦支撑了,可以考虑采用流处理框架 Apache Flink 来做(用过感觉还挺好)。运维方面可以初步上一些虚拟化容器,譬如 Docker 和 K3s 等等配合编排、管理工具使用效果会非常不错。


  1. 超大型微服务架构:这一层面的架构我是没有接触过。据我了解,这规模的微服务数量是已经超过上百个甚至上千个,将会针对核心服务采用数十上百实例的大规模水平扩展,拥有服务自治、自恢复能力,云原生架构体系等等。这没有接触过也不敢随便说...

再之后的应该就是响应式架构、Serverless 架构、边缘计算等等架构模式,只不过能力有限暂时还没有去到这些层级了。

标签:SOA,...,服务,讲讲,代码,认知,问题,架构
From: https://blog.51cto.com/u_15761576/7189481

相关文章

  • StoneDB首席架构师李浩受邀采访:浅谈KPI与开源的可持续发展,认可长期主义很重要
    编者荐语:<br>StoneDB开源社区PMC、首席架构师李浩老师近期接受了ITPUB的采访,本文是对众多采访嘉宾的汇编,李浩老师对KPI与开源提出了独特见解,推荐大家阅读。<br>以下文章来源于ITPUB,作者李雪薇近年来,全球开源生态迈向高速发展的崭新阶段,很多企业、社区和个人都将关注点......
  • Linux架构
    内核:管理硬件资源,对上层应用程序提供运行时环境系统调用:内核给上层应用程序提供的接口库函数:对系统调用进行包装,方便程序员使用(如printf,scanf,malloc,free)shell:命令解析器,一般,命令都是一些简单的可执行程序注:脚本:命令的集合应用程序(最上层)给个图: ......
  • 粗粒度可重构架构
    CGRA介绍粗粒度可重构架构(CGRA)是一种替代硬件平台,相比FPGA细粒度的可重构架构,由于CGRA内部的IS(ALU)模块已经构建完成(IssueSlot+RegistryFile+MUX构成的组合结构),且CGRA的interconnect也要比FPGA更简单、规模更小,其延时和性能要显著好于在门级上进行互连形成组合计算逻辑的FPGA......
  • 深入理解MVVM架构模式
    MVVM原理MVVM是一种用于构建用户界面的软件架构模式,它的名称代表着三个组成部分:Model(模型)、View(视图)和ViewModel(视图模型)。MVVM的主要目标是将应用程序的UI与其底层数据模型分离,通过数据绑定实现数据和UI的自动同步,从而降低代码的耦合度,提高应用程序的可维护性和可测试性。MVVM框架......
  • Streamlit项目:基于讯飞星火认知大模型开发Web智能对话应用
    1前言科大讯飞公司于2023年8月15日发布了讯飞认知大模型V2.0,这是一款集跨领域知识和语言理解能力于一体的新一代认知智能大模型。前日,博主对讯飞认知大模型进行了详细的分析,详情请至博文《星星之火:国产讯飞星火大模型的实际使用体验(与GPT对比)》了解。总的来说,讯飞星火认知大模......
  • 管理学之角色认知
    角色认知什么是角色角色是社会中对个体行为的期望系统,个体在与其他个体互动中扮演一定的角色,包括自身的特殊期望系统和外显的行为。角色是自我表现的途径和方式,个体通过角色来实现社会适应。什么是角色认知角色认知是指个体对自己和他人所扮演的角色及其规范的认知,以及判断角......
  • xfs文件系统核心架构介绍
    版权声明:本文为CSDN博主「瞧见风」的原创文章,遵循CC4.0BY-SA版权协议原文链接:https://blog.csdn.net/scaleqiao/article/details/52098546(注:xfs文件系统是一套非常成熟的文件系统,目前对其原理进行学习并记录blog,方便工作中对涉及的文件系统进行维护)0文件系统引用维基......
  • 图解 SpringCloud 微服务架构
    SpringCloudAlibaba1.1、单体分布式集群单体:也称单机结构,将一个项目全都部署在一台服务器上面,整个项目的所有服务资源都由这一台服务器提供。分布式:随着项目越来越庞大,单体式中的服务器处理能力有限,所以就将项目服务和MySQL服务分别存储在两台或两台以上的服务器上,可通过合理部......
  • LNMP集群架构
    网站集群拆分上一节我们是部署了单机的LNMP,再往下,要进行拆分了,无论是性能、还是安全性,都务必要拆分。拆分的内容有nginx集群mysqlnfs共享存储等 拆分思路情况1当前的单机环境已经装好了,数据也都有了,需要拆分到多个机器需要考虑数据迁移情况2初试环境直接以集......
  • 系统架构合理性的思考 | 京东云技术团队
    最近牵头在梳理部门的系统架构合理性,开始工作之前,我首先想到的是如何定义架构合理性?从研发的角度来看如果系统上下文清晰、应用架构设计简单、应用拆分合理应该称之为架构合理。基于以上的定义可以从以下三个方面来梳理评估:1、系统的上下文清晰:明确的知道和周围系统的调用关系,数据......