目录
1.分布式系统
1.1什么是分布式系统
若干个独立计算机的集合。对于用户来说整个集合就像是一个大的单个完整的复杂系统。如京东商城,淘宝等,都是比较常见的大型分布式系统应用。
1.2相关概念
高可用:保证系统能够不间断持续提供服务,如在100个单位时间内,99个单位内正常使用则可用性为99%。
集群:一群处理同样功能的机器部署在一起,增加系统单个功能的可用性,如在电商系统中购物车、下单等业务模块在流量过大时候,需要部署集群保证高可用。
负载均衡:当请求大量访问分布式集群应用时,将请求合理分配在不同的节点下均衡处理。
2.互联网系统架构发展历史
(Dubbo architecture roadmap)
总的来说系统架构的发展就是不断解耦和抽象的过程!
2.1单一应用架构
- 描述:将一个所有功能全部打包集成在一个应用里。
- 缺点:代码和功能高度耦合,代码重复,占用资源过多,协同开发维护困难,牵一发动全身。
2.2垂直应用架构
- 描述:将一个大型的单体应用拆分成多个独立的子系统负责不同的功能,常见的如mvc(modle、view、controll)三层架构。
- 缺点:拆分大量的应用之间需要交互,无法实现;每个独立系统从页面到底层都是完整的,一旦页面要修改,全部的子系统都需要修改,耗时费力(说到底耦合性太高)。
2.3分布式架构
- 描述:当垂直应用越来越多的时候,将应用中共有核心业务功能抽取出来,形成服务中心部署在不同服务器上。
- 要解决的问题:
a.相比垂直应用架构,分布式应用架构的不同模块部署在不同的服务器上,模块的调用要解决远程进程之间调用的问题。
b.分布式事务、分布式锁、分布Session、分布式日志等问题。
2.4流动计算架构
当服务模块越来越多的时候,服务之间的调用以及根据流量合理分配每个服务所应部署服务器数量成为问题,需要一个服务调度和处理中心去解决这些问题,SOA架构:Service-Oriented Architecture,即面向服务的架构。
- 常见的服务治理中间件:Dubbo/SpringCloud。
- 优点:分布式、可重用、扩展灵活、松耦合。
- soa架构详解:软件架构设计---面向服务的架构_hu19930613的博客-CSDN博客
2.5微服务架构
- 描述:微服务架构重点强调的一个是"业务需要彻底的组件化和服务化",原有的单个业务系统会拆分为多个可以独立开发、设计、运行的小应用。这样的小应用和其他各个应用之间,相互去协作通信,来完成一个交互和集成。
- 组件化的理解:组件表示一个可以独立更换和升级的单元,就以PC机为例,PC中的 CPU、内存、显卡、硬盘一样,独立更换升级而不影响其他单元。如果我们把PC作为组件以服务的方式构建,那么这台PC只需要维护主板和一些必要的外部设备。CPU、内存、硬盘都是以组件方式提供服务,PC需要调用CPU做计算处理,只需要知道CPU这个组件的地址即可。
3.RPC
分布式系统涉及到将业务面向服务进行分割以及进程间的远程调用这两个重要方面。后者RPC,remote procedure call,即远程服务调用;简言之,就是网络空间中不同节点之间架起一个网络连接,通过参数传递进行服务请求和响应的一种策略和思想。
3.1RPC原理 ![](https://i-blog.csdnimg.cn/blog_migrate/4a32257af466527e651dc6e818681367.png)
stub:服务提供方和消费方的代理,用于打包/解包调用参数,序列化/反序列化调用的服务、方法等信息,以便在网络中传输,屏蔽服务消费者和提供的繁琐操作。
核心:建立连接、服务寻址和网络传输(序列化和反序列化)。
3.2目前常用的RPC框架(来源于官方介绍)
-
Thrift
Apache Thrift is a software project spanning a variety of programming languages and use cases. Our goal is to make reliable, performant communication and data serialization across languages as efficient and seamless as possible. Originally developed at Facebook, Thrift was open sourced in April 2007 and entered the Apache Incubator in May, 2008. Thrift became an Apache TLP in October, 2010.Apache Thrift aims to embody the following values:
Simplicity Thrift code is simple and approachable, free of unnecessary dependencies.
Transparency Thrift conforms to the most common idioms in all languages.
Consistency Niche, language-specific features belong in extensions, not the core library.
Performance Strive for performance first, elegance second. -
gRPC
gRPC is a modern open source high performance Remote Procedure Call (RPC) framework that can run in any environment. It can efficiently connect services in and across data centers with pluggable support for load balancing, tracing, health checking and authentication. It is also applicable in last mile of distributed computing to connect devices, mobile applications and browsers to backend services. -
Dubbo
Apache Dubbo 是一款 RPC 服务开发框架,用于解决微服务架构下的服务治理与通信问题,官方提供了 Java、Golang 等多语言 SDK 实现。使用 Dubbo 开发的微服务原生具备相互之间的远程地址发现与通信能力, 利用 Dubbo 提供的丰富服务治理特性,可以实现诸如服务发现、负载均衡、流量调度等服务治理诉求。Dubbo 被设计为高度可扩展,用户可以方便的实现流量拦截、选址的各种定制逻辑。 -
Spring Cloud
Spring Cloud provides tools for developers to quickly build some of the common patterns in distributed systems (e.g. configuration management, service discovery, circuit breakers, intelligent routing, micro-proxy, control bus, one-time tokens, global locks, leadership election, distributed sessions, cluster state). Coordination of distributed systems leads to boiler plate patterns, and using Spring Cloud developers can quickly stand up services and applications that implement those patterns. They will work well in any distributed environment, including the developer’s own laptop, bare metal data centres, and managed platforms such as Cloud Foundry.3.3RPC框架的运行流程
①服务提供者向注册中心注册服务,生成唯一的服务id,附上ip端口号等信息(register);
②服务调用者向注册中心订阅服务(subscribe),服务中心将在线的服务列表返回给调用者(notify);
③调用者调用与响应服务,服务的调用和响应过程以及服务的上下线受到监控(monitor)。