建一个菠菜网站需要考虑哪些因素呢,或者我们最担心什么? 怕被攻击,时不时的DDOS攻击够你喝一壶的;怕性能不够,会员一多,访问连接数太多,网站顶不住;怕网站响应慢,延时太大,网页半天打不开。也许解决上述问题,有一堆的解决方案,但有没有一个简单粗暴的,特别有效的产品或方案对应呢?
有,那就是CDN。但,为什么它就能解决上述问题呢?
网上有很多介绍关于CDN的文章,要么太简单,就介绍有什么功能,要么就太玄奥,云里雾里,就是让你看不明白。好今天就带大家瞧瞧CDN的庐山真面目
谈CDN之前我们先谈谈菠菜公司网站的服务器架构。
下图是一般公司的服务器架构(low) ,网站一般由WEB服务器和数据库服务器构成。这个是最最最简单,没有任何优化的设计。服务器搭建好之后,就要去申请域名了,卖域名的网站很多,国内很多,上网搜一搜,国外比较有名的是godaddy。
用户访问网站流程图
服务器搭建完成后,申请好域名配置好公网IP,在第三方域名解析商或自建DNS服务器上解析完后,用户就可以访问了。
如图所示:
- 搭建服务器,申请域名及配置公网IP地址
- 选择第三方域名解析商解析
- 用户配置DNS 如8.8.8.8 或114.114.114.114或运营商DNS服务器
- 用户浏览器输入WWW.XXX.COM
- 用户到自己配置的DNS地址的服务器上查找WWW.XXX.COM的解析记录获取IP地址
- 用户DNS服务器通过递归查找最后查到为WWW.XXX.COM域名解析的服务器如cloudflare 的DNS服务器。从cloudflare 获取网址对应WEB服务器的公网IP 并返回给用户终端(PC和手机)
- 用户终端获取WEB服务器公网IP后,通过路由访问1.1.1.1:80的服务即WEB服务。
通过分析网站的服务器架构及用户访问网站的过程,不难看出这个WEB服务的很多节点都是非常脆弱且及容易被攻击的。
传统WEB服务器架构的弱点总结:WEB服务器数量较少,一台或几台,当用户数一大,性能不够,连接数不够,默认一台WEB服务器的连接数只有3W多个。
WEB服务器的真实公网IP通过域名解析被获取后,可以非常简单的被防火墙访问禁止。服务器真实IP暴露后,可以对WEB服务器展开流量攻击(DDOS),CC攻击针对连接数。
针对以上弱点,有些公司会采用以下解决方案
改进型WEB服务器及安全架构
图中的改进最明显的是服务器的角色及服务器数量大大增加,LVS负载均衡的加入,使得改服务器架构中可支持多台服务器同时提供服务,反向代理服务器可以过滤一部分基于连接的攻击,避免后端真实服务器的直接面对攻击。并通过多台WEB服务器极大提高系统的并发能力,支持更多的玩家会员。缓存服务器的加入,可以让动态页面和静态页面分离开来,加快用户的访问体验。但这种仍然没办法面对流量型攻击。
没错图中数据中心加入了重量级的安全设备,假定该数据中心带宽为40G(非常大带宽的数据中心了),并具备40G的流量清洗能力。但仍然不足以保障网站系统的安全。因为分布式的流量攻击,爆发于一点。冲击力非常强大。超过40G的流量攻击并不难组织起来,这个世界的僵死主机实在太多了。并且开启40G的流量防御服务代价非常高昂,而且一般攻击流量达到该数据中心出口带宽40G的时候,流量清洗已经没有用了,这个时候数据中心往往是关闭该网站对外的网络服务来保全整个数据中心。
即便流量在5-10G左右,如果攻击者不定时攻击,仍然会影响网站的对外服务,影响用户体验,运维人员除了观察并被磨炼心志外,并没有什么可以做的。
但是方案中通过引入LVS(负载均衡)、反向代理、缓存服务器后对系统的安全、性能、扩展性是巨大的进步,值得鼓励及肯定。并且离我们的CDN的最终解决方案越来越近了。
怎么搞定该死的分布式DDOS攻击呢,分析DDOS攻击的过程及原理不难找到答案。DDOS攻击的原理是把分布式的万千僵尸主机的涓涓细流汇聚成狂暴的河流来攻击一点。我们是不是可以把狂暴的河流化成万千的涓涓细流呢。
他强任他强,明月照山岗。
CDN的核心或者魔鬼的细节就在DNS解析原理上。稍微解析下DNS解析的原理。
域名解析记录有好几种,最著名且实用的有两种:A记录,CNAME(别名)其实翻译成改变名字更好理解,英文原意其实也是(change name)。
访问一个网站,首先拿到的是它的域名,因为域名比较好记,针对人类的,但机器并不喜欢,访问网站对于人类来说是基于名字(域名),对于机器来说是通过互联网,是基于路由,基于IP地址。所以域名解析的生意就来了,需要把域名解析成IP地址。虽然第三方域名解析商都是免费做这个事情。
CNAME 顾名思意,改变名字,对于域名就是改变域名,并不是真的改变,对于人类是不知道的。在域名解析的过程中把域名改成另一个域名。
前文说过对付分布式攻击流量,就要把聚集的流量化成分布式的,或者使其不能聚集一点。通过CNAME 可以实现把流量引向别处,暂时的,最终还是需要回来的。光引向别处还不行,还需要把流量分散开来。
好了,CDN就是这么个作用,把流量引向别处,并让流量分散开来。
CDN 架构
如架构图所示,CDN服务商会在多个地点的多个数据中心中部署服务器,起到分流的作用,及用户就近访问的作用。
CDN怎么起作用呢?比如购买了图中CDN的服务商的CDN服务,首先把菠菜网站的域名解析到这个CDN提供商,通过别名的形式,转移流量。
比如www.xxx.com Cname www.cdn.com
上述解析一般是在第三方域名解析商完成,一般是免费的。考虑行业的敏感性建议采用国外域名解析商cloudflare ,注册账号非常简单快捷,不用提供任何个人信息。
一般CDN提供商都会向用户提供域名管理界面,这个界面上填写要被保护的域名及源站公网IP地址(别名其实也可以)
这一步的主要作用是完成了引流。流量到了CDN了。
接下来就要把流量化成涓涓细流了,CDN一般自建有DNS服务器,根据客户的域名及访问的源IP地址,把流量分到就近的数据中心,比如这个客户指定用香港的线路,即把该客户网站的流量指向香港的各个数据中心。这个导流其实也是依赖于DNS功能,因为CDN DNS服务器上保留有这些节点的服务器(LVS 负载均衡服务器 或反向代理服务器)的公网IP地址。当终端用户完成DNS查询获取到节点服务器的公网地址后,用户直接通过路由访问CDN 节点数据中心的LVS服务器,并通过LVS调用客户源站WEB服务器及数据库服务器。对于网站静态页面直接通过缓存服务器访问。从而极大的提高了访问速度,并增强了并发能力。
数据流是这样的:
1) DNS查询
最终用户------www.xxx.com------CNAME WWW.cdn.com-----A记录 Y.Y.Y.(1-100)
2) 数据访问 最终用户 ----------------y.y.y.(1-100):80
发现了什么了吗,源站的公网IP地址被隐藏起来了,用户只能查询到CDN的公网IP地址。
会发现第一次访问往往比不用CDN服务还要慢,因为需要CDN DNS查询及调度。一旦完成DNS查询,后续就又快又稳。
由于CDN提供商往往在一个地方租用多个数据中心。所以完全不用担心流量型DDOS攻击了。道理很明显,40G 流量分到10个数据中心就是4G了,分到100个呢?并且最多影响部分地区的,其实根本不会影响。
由于CDN提供商在某个数据中心都启用了反向代理服务器所以也不用担心CC攻击了。如果数据中心有IPS等设备,技术型的漏洞攻击的威胁也大大降低。
好了,你明白CDN是什么鬼了吗?
CDN网络架构