中型公司网络架构拓扑与详解

综合架构图:

 

 

 

综合架构详解:

详细总结:

公司第一大环境(生产环境):

1.整个web的访问过程其实就是数据流怎么处理的。

2.访问请求分为:动态 静态请求

3.代理:分为 反向代理(reporxy) 和 集群代理 一般公司将反向代理服务器放到最外边。

4.消息列队:同步处理改为异步处理

5.CDN服务器: 阿里云或者cdn处理静态数据流。一般使用cdn便宜(智能dns) CDN公司:蓝汛,七牛 按照G流量计算费用, 存放缓存数据,cdn上边有机房,放存储数据。静态数据靠外放置。 静态数据不能进到企业内部,因为访问的流量太多,所以都交给CDN,或者放到阿里云。

6.缓存数据: 将访问请求缓存到缓存层的时候可以用网卡捆绑bond(如以太网通道) 10000Gx4

7.LVS 四层代理,放到最外边,没有任何流量产生,但并发可以达到十几万。数据量上G nginx和LVS一起用

8.web服务器: apache/nginx/tengine tengine开发nginx的,淘宝在用。配置与nginx通用。兼容nginx源代码。

9.web页面存储服务器: NFS只会用来存放web的index的页面,做web页面的数据同步,不会用作存储服务器。 FastDFS 处理静态数据,图片等。一端要连接数据库,并且将处理后的图片数据吐到缓存层上。

10.消息列队: (1)消息列对用在哪 消息列队放在readis和集群之间的。 消息列队服务器最少三台,把同步数据变为异步数据,减少对后端服务器的压力。异步解耦。 docker半解耦状态,KVM解耦状态。

***** new=syn ESTABLISHED 同协议之间的,没有消息列队的时候。 RELATED 由上一个关联包回复的随机包。

(2)为什么消息列队和web服务器不用tcp协议? 因为直接使用tcp连接式不可以的,端口不够用 随机端口号大于1024,小于65535 小于1024,大于32768 消息列队和web服务器建立tcp,

(3)消息列队算法: rabbitMQ/zeroMQ/kafka

(4)什么是消息列队: 消息列队可以提高访问量, 首先访问进来的时候,先进会话层,建立会话,

(5)中间件层 中间件层是用来判断集群干嘛的一个层,是手机端还是页面端

 

11.数据库集群: (1)主数据架构 双主数据库,也叫互为主从数据库,两个数据库写数据,一个数据库最大连接是10000,小公司用的多,数据库都是异步复制数据.

(2)面试问题: 主从数据库不同步怎么办? 一个主库可以复制8个从库,看带宽,

(3) 数据库复制的分类 异步复制 半同步复制 同步复制,强制一致性复制,NDB数据库,在内存里。

(4)数据库的写入之前的动作 lnnoDB引擎——事务 在数据库写入之前先有事务,在内存里完成,双方先建立事务,然后确定后,才往数据库写。保证数据库的完整性。

(5)双主复制存在的问题: 主键冲突,自增长(auto-increment),解决主键冲突问题,还可以判断数据是那个服务器写进来的。

(6)单循环数据库 注意:最多3台, 3台服务器互为主服务器,单循环出现问题就只剩一个完成数据库,主库不可以单独运行。

(7)数据库访问量大的时候的解决方法 数据访问量大的时候,要切表切库,就是将访问量的大的库单独迁移出去,降低其他数据库的访问压力。 切表,就是在表里的数据最多的时候,可以将表里的数据分开存放在不同的数据库里。分开访问量。

(8)MHA主从切换:解决主数据库出现故障问题 (9)galera强一致性,解决异步复制的问题,异步复制不适合数据库

注意:写入的量小于读取的量,主从数据库的比例1:8,一主拖8从。

12.oneproxy:  主数据库的代理层使用,支付宝用的,可以切表切库,库表数据随便迁移,支付宝开源出来的,平民软件。

13.主从数据库集群的调度方法: 主库用RR调度, 使用oneproxy 从库用LC调度。 使用haproxy:

14.mysql数据库的分支: mysql最新版5.7 (1)源作者写的:marriDB,与MySQL几乎一样,更新速度快。

(2)优化版的mysql(percona数据库 ) 是源数据的15倍左右,和源数据(mysql)库版本一样,晚一周发布,优化的和MySQL数据库,是mysql的商业软件。www.percona.com xtrabackup(热备数据库) 如果面试问到数据的优化,就可以说我们用的是percona,自动优化,是普通数据库的17倍。

15.数据库的消息列表: 事务要有缓存,就是消息列队,可以保障数据的进出顺序,

 

16.缓存数据库: redis/或者memcache/持久化数据 数据库的缓存层,需要把一部分数据放在缓存层,加快读写的速度。 也叫动态数据缓存层。 查询方法叫遍历,从第一条一直读到最后一条。

思路:访问请求到了中间件层的时候,用来判断下面的集群干嘛的,如果读数据库的时候,则先读缓存层,如果没有的话,在进消息列队,然后写入或者读取数据,对redis的读写是由中间件来完成的。

17.注意:热备和冷备都在从数据库上做。

注意:同步是从库集群的某一台从库做备份

注意:消息列对,缓存层不能宕机

18.存储服务器: 从从库里将数据往外存, 物理层:raid10 iscsi进行挂载,将原来所有库数据挂载出来,保证存储,将数据放到Hbase或者Spark里

19.证书服务器: 运行应用层的时候,要使用https,使用CA服务器。

注意:数据是走缓存路线出去的。

20.自动化三大服务: 系统自动化 PXE/kickstart 程序自动化 ansible(100台)/saltstack(部署大量的) puppet(不用) 代码自动化

以上是生产环境: ——————————————————————

公司的第二大环境:(开发测试环境): 代码仓库,开发人员存放代码的地方。maven将上传的代码打包,然后将代码传通过jenkins-webhook部署到k8s上,然后通过k8s对docker—swarm进行部署,根据需求开多少台docker,这叫可持续化集成

公司第三大环境(辅助类): (1)监控服务器: web相关服务器的监控,

zabbix:主要监控服务器的吞吐量,

ngios:可以监控系统的运行,网络流量,可以监控windows,linux等。

cacti:snmp网络设备的硬件,服务器的硬件。

数据库相关的监控, lepus(天兔)

 

(2)日志服务器: 单个文件最大不超过4G,所有将大文件的日志做数据切割,然后通过 ELK日志分析工具,进行分析。

(3)认证服务器: LDAP服务器统一管理用户。 系统用户,监控用户,公司的通过VPN拨号的用户,所以要进行认证。

 

总结: 一共三部分访问入口: 外部访问。代理服务器,防火墙只开放80端口,DNS只解析反向代理服务器 运维访问,在ssh+随机码可以进入,通过vpn服务器,用户认证,可以到zabbix和lepus查看,可以通过飞信微信报警。 开发访问,可以通过测试环境的防火墙进入测试环境,进行测试操作,然后完成测试的架构进行上架,docker不可以直接放数据库,所以目前只用在测试环境。

 

 

******************************* ******************************* 自己总结:

 

一.生产环境

1.客户端服务器: 2.防火墙:华为,思科 3.反向代理服务器: nginx动静分离,将静态的数据请求给CDN或者阿里云,动态的留下里给公司内部 4.客户端通过DNS服务器解析后对web服务进行访问,然后到了反向代理,反向代理将静态数据交给CDN,CDN服务器通过对IP地址的判断,然后告知里客户端最近的CDN缓存服务器,然后由缓存服务器去回复客户端,如果缓存没有数据,则北京的CDN后端的真实服务器就会将数据缓存到CDN缓存服务器,然后告知客户端。

添加:【 百度,全squid服务架构。

一台varnish可以抗住1G的dds攻击

智能DNS溯源:整个CDN的流向过程,判断原来IP地址离我更近的过程。

公司网站优化的办法: 将静态数据给CDN或者阿里云

 

如果是小公司,公司最外表放一台反向代理服务器就可以了 】

5.LVS和nginx区别: LVS四层代理 放在最外边,因为他们中间不会产生任何流量,使用的arp转向(4种arp),改变了arp的解析方向,将ip地址解析到了后边的七层代理的集群上,LVS单并发达到十几万, nginx七层代理

6.会话池服务器(redis/memcache) redis——非关系型数据库 mysql——关系型数据库 登陆以后,首先会连接会话池,用来验证登陆用户密码的。

7.消息列队,用在数据库集群代理层中间,有时候也用在web集群中间,放到缓存集群和web之间最少3台构成,目的是把同步流量变为异步流量,还可以直接让消息列队和web服务器建立tcp连接,这样就不会出现由于大量的访问进来,没有消息列队,tcp的端口不够,或者服务器压力太大的故障。 会话池和消息列队给访问建立消息通道,提高访问量和在不同页面的重复输入账户的情况。 * 一台nginx最多可以代理10台服务器。

8.缓存层(cache) 静态数据缓存层 squid(存在硬盘里,速度很慢) varnish(内存里)* 缓存数据从web集群上来。 如果客户的访问请求在缓存层有,则不会往下走了,直接回复给客户端。 反之,继续往下走

9.web服务层,(apache/nginx/tengine)

10.web层上的存储服务器 NFS服务器,用来存放静态页面的index文件,做web页面的数据同步,不可用于存储服务器。 FastDFS,处理静态数据,图片等处理,让所有数据都注册到数据库里,所以另外一端连接到数据库,然后将处理好的数据吐到缓存层,提供高速的访问,静态数据就处理完成了。

11.CA服务器 运行应用层,做web页面的时候,要做https,要进行认证,可用可不用,也可以在每台web服务器上添加。

12.数据库的消息列队集群 数据的连接需要事务,事务要有缓存,就是消息列队,可以保障数据的进出顺序,

 

13.oneproxy 使用rr(轮询)调度 主数据库的代理层使用,支付宝用的,只要使用oneproxy,可以切表切库,库表数据随便迁移,支付宝开源出来的,平民软件。

14.Haproxy 从库集群的代理,使用LC调度(最小连接数)

 

15.数据库端: 主数据***** (1)双主数据库: 数据库所有数据都是异步处理, 写入数据库前需要有事务,事务保证数据的完整性,数据库先在内存里完成的,然后在往硬盘上写。 双主数据库问题: 主键冲突,通过auto-increment自增长来解决。 (2)单循环数据库 三个主数据库互为主,不允许超过三个。 单循环数据库问题:主从切换问题,当主数据库坏掉的话,使用MHA可以即使把从数据库切换过来,进行使用。

从数据库***** 从库使用的是LC,最小连接数

16.数据库的缓存层(redis) 关系型数据库的上边要套一层非关系型数据库作为缓存,也就是redis或者是memcache,目的是将一部分数据缓存到数据库的缓存层,数据是缓存在内存里,可以加快读取数据的速度,关系型数据库慢,非关系型数据库快,硬盘慢,内存快。

读写redis,是由中间件完成的,因为中间件来判断集群是干啥的,所以当数据来的时候首先去赵redis,如果命中,则回复给客户端,如果为命中则继续往下走,找到数据库的消息列队,去访问数据库,然后数据库将数据缓存给redis,然后在回复给客户端。

17.存储服务器, 物理安全:raid10 iscsi挂载数据库上,将原来所有库数据挂载出来,保证存储,将数据放到Hbase或者Spark里

18.弹性web consul+nginx consul网络服务发现协议 用来放置会话层和缓存层出现问题,根据流量的大小,来承接nginx的流量

注意:数据是走缓存一步一步出去的,并不是怎么进来怎么出去的。

19.自动化服务器 系统自动化PXE/kickstart 程序自动化ansible(100台)/saltstack(部署大量)/puppet/(麻烦,不建议用) 代码自动化(用代码部署,关机部署然后开机)

**************************************************************** 二.测试环境:

1.开发人员将代码传到代码库, svn服务器,控制代码的版本的,开发人员存代码的地方,谁是最后一个完成的,服务器会有一个判定。 maven是将上传的代码打包 2.触法jenkins,部署代码自动化的,

3.然后将代码部署到K8S或者swarm上,K8S用来部署docker环境的 整个叫可持续化集成。

三.辅助类 1.web相关的服务器 监控:zabbix监控web页面和吞吐量, 2.数据库的监控 lepus(天兔)阿里的数据空监控 3.其他监控 ngios和cacti ngios可以监控windows cacti使用snmp,可以监控网络设备的硬件

4.日志切割: 单个文件不能超过4G ,所以在使用数据的时候要进行切割,然后在拿出来通过日志分心工具进行分析。

5.认证服务器 LDAP服务器,统一管理用户账户,和windows的域控一样。

6.不同的访问 客户: 正面只开80端口,客户端的DNS只能解析到反向代理。

运维: 通过随机码,拨入VPN,然后进入web的监控,和数据库的监控,然后查看日志。

开发: 可以通过HA-proxy可以进行测试环境。

 

 

posted @ 2018-04-08 09:08  Leonardo-li  阅读(15892)  评论(0编辑  收藏  举报