Open rainzhaojy opened 7 years ago
这里讨论一下分布式应用的一些点。
当单机模式无法满足高并发用户量时,这时需要考虑系统扩容,扩容通常有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的数据同步就是采用这种原则。
写的不错
这里讨论一下分布式应用的一些点。
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的数据同步就是采用这种原则。
常用技术与理论