初识Redis:
Redis是用来存储数据,是在内存中存储数据。多个服务器(分布式系统)共享一份数据,由于进程隔离性,又想让数据在内存中。Redis基于网络这样的工具,将自己内存中的变量分享给别人。从而让多个进程甚至多个主机访问到Redis里边的变量(共享使用)。
mysql访问速度相对比较慢 ,Redis也可以当作数据库,Redis比mysql快很多,Redis用内存,而mysql是硬盘存储的。
劣势:
Redis空间有限,而且内存成本高,对性能要求不高的可以直接使用mysql。
很多时候可以将mysql和Redis结合起来使用,也就是形成“又大又快”的数据库 。把一小部分热点数据放在Redis,大部分数据放在mysql中,但是会提高系统的复杂程度,并且数据修改还会涉及到Redis和mysql数据同步。
分布式系统:
这里是我们原先学的单机架构,一台服务器负责我们原先的所有工作,应用程序也就是我们的服务器程序,比如spring什么的来写应用服务。mysql是客户端服务器程序,mysql作为本体去存储数据,http服务器来读取和使用数据。
一台主机的硬件资源有限,可能会导致处理业务时间变长,我们只能引入更多主机来缓解压力。
如何处理硬件资源不够用
开源:增加更多的服务器
增加更多的主机 ,并且在软件层进行更多的调整 ,引入分布式一定是万不得已,会增加系统的复杂程度。
节流:软件优化,性能测试等等
应用服务和数据库分离
各自用各自的,根据不同特点配置服务器,应用服务比较吃业务逻辑,配好一点的cpu和内存,数据库服务器需要更大的硬盘空间,更快的数据访问数据,配一个更大硬盘上SSD硬盘
应用服务器集群架构:
请求太多了可能顶不住,用户请求先访问负载均衡器(网关),每个应用服务器承担不同的任务,这样每个应用服务器就可以减小压力。负载均衡也可以防止其中一个挂了影响程序运行。
负载均衡器:就像组里的领导一样 ,为每个组员分配任务。分配任务不用花费太多资源不用担心挂掉。实在不行在引入一个负载均衡器。
数据库读写分离:
主从数据库
实际场景读的频率是比写的频率高,一般只有一个主服务器一主多从。从数据库通过负载均衡让应用程序访问。
引入缓存
将数据库的数据进行冷热区分
放热点数据在缓存里面。数据库还是全量数据。需要数据的时候先读缓存,再读数据库。但是如果需要修改缓存和数据库里面的数据,就要同时修改,就会出现数据一致性的问题。
数据库分库分表
如果一台主机存不下,就要对数据库(create databases)进行更进一步的拆分,本来数据库中有很多表,就可以存储很多层级,表很大就可以分表。
微服务结构:
应用服务器业务可能比较复杂,为了更方便代码的维护,就可以把复杂的服务器,拆分更多功能更单一更小的服务器。通过功能实现微服务有利于人员组织和分组。
微服务的代价:
- 由于各个功能跨主机进行网络通信,性能下降。
- 系统复杂提高,可用性受到影响,出现问题概率更大
微服务好处:
- 代码的复用。
- 不同的的服务不同的部署
- 解决管理人的问题。
小结:
模块组件:就是应用中的一个功能。
分布式:多台主机配合完成功能,物理上的多个主机。
集群:多台主机配合完成功能,逻辑上的。
主从:节点的数据要从主节点这边同步过来。
中间件:数据库,缓存,消息队列。