近来无事将最近几年的一些工作心得整理一下,如有不对,请大家多多指点,如有补充,请大家在评论区多多
拍砖:
因为近来对大数据量、高并发比较感兴趣,所以将我2年前曾经供职的一家US的大型电子商务公司(每天平均访
问量在1200W以上)的架构总结如下:
系统整体架构:公司在US东海岸和西海岸均有一个服务器集群,每个集群大概有20多台高性能服务器。
1)当客户访问时,有一个统一的第三方硬件分配系统,将访问分别导向最近的集群之上进行访问。毕竟光纤
中的信号也是需要时间进行传输的,而且如此也是可以对整体系统的安全性上进行备份并在访问压力上进行流
量分流。
2)当导到最近的集群后,又有一第三方负载均衡系统将访问分别导向到集群中不同的服务器上进行访问。
同时服务器也会进行更进一步的细分:(1)Web浏览服务器;(2)订单服务器;(3)SQL Server服务器
其中(1)和(2)的大致分别设置为4:1,因为在每天的访问客户中,大概只有1/4或1/5的客户下订单。
3)客户在网站上下订单后,因为每时每刻的订单量都是成千上万的,所以我们的订单都是采用异步方法进
行传输以及写入。首先是通过Web Service将接收到的订单写入到MSMQ(微软自带的消息队列)中,然后通过
WindowsService将MSMQ中的信息写入到SQL Server数据库中。
4)将SQLServer中的数据根据一定的条件在合适的时候全部写入到一个统一的数据库中。
从数据库中读取信息显示到网站页面上的步骤和优化方法:
1)将数据写入的数据库(A数据库)映射一份到其它服务器上的的数据库(B数据库)中,B数据库中的字段
一般不进行读写的操作,而是只进行读取操作。在B数据库中对需要常常读取的数据表进行索引设置,以加快查
询时的速度。
2)每隔一定的时间(本网站一般是半小时),后台跑一个应用程序,将网站上的畅销的产品及其特性(包含
其具体性能参数、库存数量等)生成一个XML文件,并存储在内存中,以便可以更快的向网站显示信息。
3)网站上的搜索功能使用第三方搜索软件,如Endeca,这样可以更快的从内存中查询到需要的数据(因本
网站产品极多,使用直接连接数据库进行搜索,会极大的影响带宽和速度)。
网站上要用到的一些安全设置:
1)WebService暴露在网站上时,最好使用非对称的加密算法,这样就算黑客知道了客户端的密钥,也是无
法建立连接的,因为服务端每一次的密钥都是不同的。
2)页面上的URL链接进行加密显示,如不显示asp、aspx、jsp等,而是将其后缀名字进行一定的转换再显示
给客户。并且当使用分页或搜索时,URL中不要显示出页面序号或搜索的字段号,而是经过一定的算法转换后,
将经过加密的URL显示再浏览器中。这样可以保证我们不向客户端显示出数据库中表的字段名字,因为这样是不
安全的。
3)Web服务器或数据库服务器的用户名和密码要经常进行更改。
4)服务器上的一些端口号要进行关闭,或进行授权开通。并要经常升级系统补丁和杀毒软件的病毒库。
5)数据库链接字符串不要明码写到Web.config中,而显示经过伪装的字符串(例如:userid=[USERID],
password=[password]),同时将用户名和密码放入一个自定义的文件中,放到d、e等磁盘中均可。因为在磁
盘中可以进一步的限制由哪些用户可以打开此文件。在此文件中显示的也是经过进一步加密后的用户名和密码
,总之,是无论在任何地方都不要显示明码的用户名和密码,而是在系统运行时,通过解码来得到正确的数据
库链接字符串,虽然在性能上有些损失,但是对数据库中的数据却是更加安全。
6)数据库中要尽量避免使用Admin级别的用户名,而是针对不同的数据库使用不同的用户名和密码(最好针
对一个实例中的各个不同的数据库分别分配用户名和密码,也可以对每个实例中的不同的数据库针对不同的
team分别分配用户名和密码)。同时将其角色的级别要降到最低,刚好可以操作数数据库中的表即可。
网站上要要用到的一些小常识:
1)对于加载javascript和css文件,需要在HTML的头文件中进行加载。因为Web的展示是对html进行逐行扫
描展示的,如果页面载入的慢一些的话,而javascript和css文件在文件最后加载,那么可能用户看到的是没有
渲染的页面,而最后加载后,页面又重新刷新而重新应用这些设置。这样就浪费了系统的页面响应时间。对于
大流量的网站来说是影响非常大的。
2)尽量少用一些服务器端控件,而多使用Html控件,因为微软对于服务器控件多有一些Viewstate,这样可
能导致网络流量的增加。
3)如果对于一些txt或固定的文本型页面,我们可以运用IIS中的Gzip功能,将其进行压缩,以减少网络间的
数据流量(图片对此无法进行压缩)。
4)对于网站上使用最多的图片来说,因为其是最浪费网络数据流量的,所以我们在其数据量非常大时,我们
借用第三方软件(其在全世界各处均有大型服务器集群,可以提供各种服务)。我们将我们上传的图片传到我
们的图片服务器上后,第三方的服务器上每隔几秒就会从我们的服务器上拉最新的图片数据,并将其存储到世
界各地的服务器集群中,因为其带宽是定制的,所以网站访问图片时,可以快速下载下来。比自己从自身的图
片服务器上下载要省事省时(而且不爽其下载速度时,还可以骂骂他们,呵呵)。