单体架构(Monolithic) “单体”只是表明系统中主要的过程调用都是进程内调用,不会发生进程间通信,仅此而已。
在软件设计的时候经常提到和使用经典的3层模型:表现层
,业务逻辑层
,数据访问层
。
虽然在软件设计中划分了3层模型,但是对业务场景没有划分,一个典型的单体架构就是将所有的业务场景的表现层,业务逻辑层,数据访问层放在一个工程中最终经过编译,打包,部署在一台服务器上。
随着访问量的不断提升,一台服务器必将无法承载一定量级的访问。因此,诞生了集群化部署。
在应用初期,访问量不大,功能迭代比较频繁,单台服务部署比较方便,开发效率高且成本低。但是,随着业务的越来越复杂,用户访问量越来越大,单机的QPS很容易就达到了瓶颈。为了解决这个问题,同时提高服务器的容错,集群部署的方式就慢慢的诞生了。
从图中,可以很清晰的看出:将应用分别部署多个副本到多个应用服务器中,通过负载均衡将访问流量,均匀的打在每个应用服务器上。这样理论上,可以通过平行扩容应用服务器就可以解决并发访问的问题。
在应用服务器的背后,数据库、对象存储和缓存服务器 也同样使用类似的架构,来达到给应用服务器集群提供更高的连接数、更高的QPS。
随着业务的不断发展,单体架构的优势已逐渐无法适应互联网时代的快速变化,面临越来越多的挑战:
业务场景简单、功能不复杂、研发人员少、创业公司初期,都适合先用单体模式(当然,你的工程搭建的时候,可以模块化,只是部署的时候是单体架构)。
为了允许程序出错,为了获得隔离、自治的能力,为了可以技术异构等目标,是继为了性能与算力之后,让程序再次选择分布式的理由。然而,开发分布式程序也并不意味着一定要依靠今天的微服务架构才能实现。在新旧世纪之交,人们曾经探索过几种服务拆分方法,将一个大的单体系统拆分为若干个更小的、不运行在同一个进程的独立服务,这些服务拆分方法后来导致了面向服务架构(Service-Oriented Architecture)的一段兴盛期,我们称其为“SOA 时代”。
SOA 架构(Service-Oriented Architecture) 面向服务的架构是一次具体地、系统性地成功解决分布式服务主要问题的架构模式。
SOA实现的两个最重要的概念
SOA(Service-Oriented Architecture)的特点:
微服务架构(Microservices)
微服务是一种通过多个小型服务组合来构建单个应用的架构风格,这些服务围绕业务能力而非特定的技术标准来构建。各个服务可以采用不同的编程语言,不同的数据存储技术,运行在不同的进程之中。服务采取轻量级的通信机制和自动化的部署机制实现通信与运维。
概念:把一个大型的单个应用程序和服务拆分为数个甚至数十个的支持微服务,它可扩展单个组件而不是整个的应用程序堆栈,从而满足服务等级协议。
定义:围绕业务领域组件来创建应用,这些应用可独立地进行开发、管理和迭代。在分散的组件中使用云架构和平台式部署、管理和服务功能,使产品交付变得更加简单。
本质:用一些功能比较明确、业务比较精练的服务去解决更大、更实际的问题。
微服务其实就是SOA的一个变种:SOA喜欢水平服务,微服务喜欢垂直服务
微服务是从软件层面独立解决问题,随着K8S的崛起和Spring Cloud的成熟,逐渐软件和硬件可以一体,来解决架构问题。有的人称之为:后微服务世代(Cloud Native),也有叫 云原生的。
早期,云原生架构有几个特征:
简单来说就是:
模块化(Modularity)
可观测性(Observability)
可部署性(Deployability)
可测试性(Testability)
可处理性(Disposability)
可替代性(Replaceability)
2019年,VMware Tanzu 官网给出了云原生最新定义,以及云原生的架构原则:
云原生一直在被定义,也一直在被重定义。但是可以看出,云原生技术很有可能成为未来的发展方向。我们期待着……
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。