大型分布式网站设计与实践
时间:2023-09-08 16:54:02 | 来源:网站运营
时间:2023-09-08 16:54:02 来源:网站运营
大型分布式网站设计与实践:分布式应用架构就是解决系统之间的通信,存储,安全,性能监控,还有数据分析等问题。
通信:按照功能和业务分拆为多个子系统之后,首要问题就是各个子系统之间的通信,也叫作远程调用(RPC)。
基于http协议的RPC,具有灵活便捷,平台无关性等优点,因此得到广泛的使用。
基于tcp协议的RPC,通信效率高,但是实现起来更加复杂,各个企业之间的协议和标准不同,难以实现跨平台和企业间通信。
同时基于网络环境的复杂性,同时还要考虑多线程并发,锁,io等底层细节的实现,任意小的错误都会被无限放大。因此选择http协议更符合主流 很多成熟的web容器已经处理好这些事情 开放人员可以将更多的精力集中在业务的实现上,而非处理底层细节。
同时通过代码优化和使用gizp数据压缩 能够缩小与tcp通信效率的差距。
通信载体,JSON是以字符串形式,通过人眼可阅读,
Protocol buffer虽然性能要更好,但是代码入侵性大
XML结构过于冗余
当系统的集群规模很大时,通过人工去管理负载均衡,去配置维护服务和配置信息越来越困难。负载均衡服务器一旦宕机,其他依赖它的服务就会失效。
此时,需要一个能够动态注册和获取服务信息的地方,统一管理服务的名称和其对应的服务器列表信息,称为服务配置中心。
能够感知服务的存活状态,注册新的可用服务。
zookeeper是针对大型分布式系统的可靠的协调系统,提供的功能包括配置维护,名字服务,分布式同步等。
存储:通过NoSQL实现热点数据缓存。
使用NoSQL实现分布式session。
MySQL读写分离,分库分表。
消息系统,消息作为应用间通信的一种方式,保存在队列中,实现系统的异步,降低系统耦合度,提升响应速度。
ActiveMQ,rabbitMQ等,常用的是发布订阅模式。
垂直化的搜索引擎在分布式系统中是一个非常重要的角色,既能满足用户对于全文检索,模糊查询的需求,解决like查询效率低的问题,同时解决由于分库分表,或者使用NoSQL导致无法进行多表关联查询的问题,开源的搜索引擎框架Lucene和solr的组合。
安全:对于常规的web攻击手段,如xss,CRSF,SQL注入等,通常解决容易,如xss的防范通过转义输入的尖括号,
防范CRSF需要将cookie设置httponly 以及增加session的hash token,
防范SQL注入需要将分号等符号转义
图片上传漏洞,通过压缩图片来处理。
数字摘要算法有md5,sha,base64,
就是一个值通过某个函数的处理得出另外一个对应的值,当有些摘要算法不可逆向,并且暴力破解难度大的时候就可以直接作为加密算法使用,base64可逆向,所以它不作为加密算法。
加密算法,
对称加密算法,DES,AES
非对称加密,RSA
签名认证是非对称加密技术与数字摘要技术的综合运用。
HTTPS就是签名证书的一种运用。
OAuth协议是授权第三方应用访问开放平台的技术。
性能监控:由于线上系统不能够debug解决问题,所以通常是通过分析日志查找问题。分析日志过程中,经常需要使用一些shell命令,或者写一些脚本加快分析的速度,更快的从日志中筛选有价值的内容。
如grep,awk等命令
性能测试工具,ab,jmeter
数据分析:对于写入的日志可以采用轮循的方式读日志文件,但是对于不频繁写入的日志这样做效率太低了,可以通过Linux系统提供的inotify机制,检测文件被写入了通知应用程序来收集日志,
读取到日志内容不是简单的输出打印,而是通过activemq等消息中间件发送给那些日志订阅方,然后进行相应的数据分析。
inotify解决日志收集效率问题,ActiveMQ解决日志数据分发问题,接下来就是解决日志分析和存储问题。
数据经过inotify的收集,activeMQ数据转发,经过storm进行实时处理,在存储到MySQL,HDFS,hbase等存储系统,最后再进行深度分析和实时的展现。
对于不需要实时分析的数据,可以保存到HDFS上,然后通过mapreduce或者hiveSQL进行数据分析和挖掘。
对于需要实时展现的内容,则可以保存到hbase上,hbase是高性能可伸缩的列表系统。
Hadoop的两个核心,HDFS和mapreduce。
HDFS分布式文件系统并非传统意义上的文件系统,它工作在操作系统的用户空间,由应用程序来实现,并不依赖底层文件系统的具体实现。
hive是基于Hadoop的一个数据仓库工具,可以将HDFS存储的结构化的数据文件映射为一张数据库表,并提供SQL查询功能。
根据数据类型的不同,数据分析分两种:
批量数据分析,适合做有限的数据的分析挖掘,离线数据分析大部分采用这种方式。如hive
流式数据分析,永远不会终结的流,源源不断的从应用服务器流向日志分析服务 ,这种适合实时在线分析。如 storm
数据同步,
离线数据同步用sqoop,能够将MySQL和HDFS或者hive进行双向的转换。
实时数据同步用activeMQ,实现增量数据同步。
数据报表工具,highcharts