Nginx反向代理与MM数据库集群




图片222.png

前言:

    距离上一篇博文已经N多年了,今天小弟学习到了有关Nginx的更多详细内容,想要跟大家分享一下,但是具体的配置步骤我就不一一罗列出来了,因为毕竟你了解了他的整个逻辑与思路,那么那些配置套路对于你来说就是小case啦.不外忽就是三步:装包配置起服务

    上面的标题是我自定义的,其中MM代表的是Mysql与Memcache;

    不得不说这是个很简陋的图,比那些高可用高负载什么的实在简陋太多.但毕竟是提供一种思路,所以越简洁越好.

    上面的(1)(2)(3)(4)在下面的第六部分上有说到.


.正常逻辑:

Client访问Nginx调度器

调度器转发给后端Web服务器

Web通过动态语言(如PHP)以读写方式访问Mysql

Mysql返回结果给Web,Web -> Proxy -> Client

 

.弊端:

以下是读写速度的对比

CPU缓存 > 内存 > 磁盘 > 数据库

数据库读写速度是最慢的,影响客户体验


.分析:

Nosql上场,常见的Nosql有Memcache,Big,MongoDB,redis

Nosql与传统关系型数据库不同的地方在于:

Nosql采用Key-Value 和 Ducument 形式存储数据,具有高并发,高扩展,由于他是缓存在计算机内存中的,读写速度极高.但有个致命缺点:

过段时间会清空缓存,数据会丢失.

这时关系型数据库可以很好的解决这个问题,他采用关系型存储,数据与数据之间必然有关联,有主键等规范用法.查询数据便利,有规范的SQL语句.数据不易丢失,,Mysql读写分离与主从同步可实现高可用;但关系型sql有个致命缺点:

数据读写最慢.


.这样,MemcacheMysql成为互补的关系:

Memcache提升Mysql的读写速度

Mysql为Memcache妥善保存数据


.只要实现MysqlMemcache同步就可以解决问题


.这样就有了整个逻辑(有两种情况):


1.当Memcache缓存并未清空时:

Client第一次以写访问Nginx调度器

调度器转发给后端Web服务器

Web通过动态语言(如PHP)缓存写入Memcache

(3)Memcache同时将数据备份到Mysql

Client以读访问Nginx调度器

调度器转发给后端Web服务器

(2)Web通过动态语言(如PHP)读取Memcache

(1)Memcache返回结果给Web,Web -> Proxy -> Client


2.当他清空了缓存:

Client第一次以写访问Nginx调度器

调度器转发给后端Web服务器

Web通过动态语言(如PHP)缓存写入Memcache

(3)Memcache同时将数据备份到Mysql

Client以读访问Nginx调度器

调度器转发给后端Web服务器

(2)Web通过动态语言(如PHP)读取Memcache

(4)Memcache发现无缓存,从Mysql读取备份数据后并缓存

(1)Memcache返回结果给Web,Web -> Proxy -> Client