rainzhaojy / blogs

200 stars 28 forks source link

构建高可用的分布式应用 #11

Open rainzhaojy opened 7 years ago

rainzhaojy commented 7 years ago

这里讨论一下分布式应用的一些点。

Scale up还是Scale out?

当单机模式无法满足高并发用户量时,这时需要考虑系统扩容,扩容通常有Scale up和Scale out两种做法,两种扩容的方式分别从两个维度来解决系统访问压力。

Scale up就是纵向扩容,通过增加单机的硬件配置来解决访问压力,Up模式实施成本较高,大到一定压力之后,终究会遇到硬件瓶颈,而且有单点问题。

Scale out就是横向扩容,使用一组普通的服务器搭建服务器集群,构建分布式应用架构、分布式数据库等来解决访问压力。Out模式更加经济、更具扩展性、更加可靠。

构建分布式应用

构建高可用的分布式应用通常需要解决几个问题:

各子系统之间的通信方式:

跨语言通信方案:

数据库

数据设计与数据库的选择是系统设计的重要一步。数据库从大类上分为关系型数据库(RDBMS)和非关系型数据库(NoSQL),RDBMS代表产品有Oracle, MySQL, PostgreSQL等,RDBMS遵循ACID原则:

NoSQL数据库泛指非关系型数据库,NoSQL有如下几类:

各种数据库的排名可以参考: https://db-engines.com/en/ranking

在分布式系统里,有可能需要设计分布式数据库,需要考虑数据分片、数据同步、数据一致性、分布式事务等。

一致性模型

主要有三种:

以及其他一些变体:

其中最重要的变体是第二条:Read-your-Writes Consistency。特别适用于数据的更新同步,用户的修改马上对自己可见,但是其他用户可以看到他老的版本。Facebook的数据同步就是采用这种原则。

常用技术与理论

developer-scuec commented 5 years ago

写的不错