架构师技术栈
2019-04-03 16:19:01   0  举报             
     
         
 AI智能生成
  大型网站技术架构
    作者其他创作
 大纲/内容
  高可用    
     高可用应用    
     负载均衡进行故障转移  
     集群的session管理    
     同IP会话黏滞  
     session服务器  
     redis共享session  
     高可用服务    
     分级管理    
     核心服务优先使用更好的硬件  
     不同级别的服务需要隔离,避免故障连锁反应  
     超时设置    
     超时后,通信框架抛出异常,程序选择继续重试或失效转移  
     异步调用    
     消息队列  
     防止关联的服务互相影响  
     服务降级    
     拒绝服务    
     拒绝低优先级应用的调用,减少服务调用并发数  
     随机拒绝  
     关闭功能    
     关闭部分不重要的服务  
     关闭服务内部部分不重要的功能  
     实施方式    
     基于Java的信号量机制:Semaphore  
     调用超时次数超过阈值,自动降级,后续来的流量直接拒绝,等超过休眠时间点,再次对服务进行重试  
     幂等性设计    
     重复调用和调用一次必须保证结果相同  
     异地多活机房    
     保证核心业务异地多活    
     例:注册、登录、用户信息,只有登录才是核心业务  
     核心数据最终一致性    
     尽量减少数据同步,只同步核心业务数据  
     保证最终一致性,不保证实时一致性  
     采用多种手段同步数据    
     消息队列  
     二次读取    
     第一次读取本地失败后,根据路由规则去另外一个机房读取  
     存储系统同步方式    
     Mysql同步  
     回源读取    
     session id不同步,本地机房没有该id的情况下,根据路由去另外一个机房获取  
     重新生成数据    
     session id在另外一个机房未获取到,则让用户重新登录  
     保证大部分用户的异地多活  
     高可用数据    
     数据失效转移机制    
     失效确认  
     访问转移  
     数据恢复  
     CAP    
     一个提供数据服务的存储系统无法同时满足数据一致性、数据可用性、分区容忍性,
通常会牺牲数据一致性
    通常会牺牲数据一致性
 一致性(Consistency)    
     对指定的某个客户端来说,读操作保证能够返回最新的写操作结果  
     可用性(Availability)    
     非故障的节点在合理的时间内返回合理的响应(非错误和超时的响应)  
     分区容忍性(Partition Tolerance)    
     当出现网络分区(网络故障)后,系统能够继续“履行职责”  
     ACID    
     数据库约束  
     Atomicity原则性  
     Consistency一致性  
     Isolation隔离性  
     Durability持久性  
     BASE    
     Basically Available基本可用    
     分布式系统在出现故障时,允许损失部分可用性,即保证核心可用  
     Soft State软状态  
     Eventual Consistency最终一致性  
     是CAP理论中AP方案的延伸,即使无法做到强一致性,但应用可以采取适合的方式达到最终一致性  
     高可用存储    
     数据备份    
     冷备  
     热备    
     异步热备  
     同步热备  
     主备复制  
     主从复制    
     主机负责读写,从机只负责读  
     主主复制    
     对数据的设计有严格的要求,一般适合临时、可丢失、可覆盖的数据场景  
     数据集群    
     数据集中集群    
     一主多备  
     一主多从  
     数据分散集群    
     Hadoop的HDFS存储系统    
     独立的服务器负责数据分区的分配(Namenode)  
     Elasticsearch    
     选举一台服务器做数据分区的分配(master node)  
     分布式事务算法    
     2PC,强一致性算法    
     Commit请求阶段  
     Commit提交阶段  
     3PC    
     提交判断阶段  
     准备提交阶段  
     提交执行阶段  
     分布式一致性算法    
     Paxos    
     纯理论算法,特别复杂,是其他算法的鼻祖  
     Raft    
     为工程实践而设计,Paxos算法的不完整版  
     ZAB  
     自动化测试    
     工具:selenium  
     接口性能工具:Jmeter,loadrunner  
     监控    
     数据采集    
     用户行为  
     服务器性能    
     系统load  
     内存占用  
     磁盘IO  
     网络IO  
     运行数据    
     缓存命中率  
     平均响应延迟时间  
     每分钟发送邮件数目  
     待处理任务总数  
     监控管理    
     系统报警  
     失效转移  
     自动优雅降级  
     Linux命令    
     日志查看    
     cat    
     cat -n access.log 显示行数  
     more    
     Enter:下一行,空格:下一页,F:下一屏,B:上一屏  
     less  
     sort    
     对内容进行排序  
     -n    
     数字从小到大排列  
     -r    
     数字从大到小排列  
     -k    
     指定排序的列  
     -t    
     指定分隔符  
     wc    
     统计指定文件的字符数、字数、行数  
     -l    
     统计行数  
     uniq    
     查看重复出现的行  
     sort uniqfile | uniq -c    
     -c:每一行前面加上该行出现的次数  
     常用脚本    
     页面访问量前十的f1列    
     cat access.log | cut -f1 -d " " | sort |uniq -c | sort -k 1 -n -r |head -10  
     查看最耗时的页面    
     cat access.log | sort -k 2 -n -r | head -10  
     系统监控    
     uptime    
     查看系统的load    
     一般来说,load不大于3,表示负载正常,load大于5,负载压力过高  
     top | grep Cpu    
     st    
     us    
     表示CPU执行用户进程所占的时间,越高越好  
     sy    
     在内核态所花费的时间,越低越好  
     ni    
     系统在调整进程优先级花费的时间  
     id    
     系统空闲时间  
     wa    
     CPU在等待IO操作所花费的时间,越低越好  
     hi    
     系统处理硬件中断所占用的时间  
     si    
     系统处理软件中断所占用的时间  
     top -p 进程号    
     查看指定进程  
     du-d 1 -h    
     查看磁盘剩余空间,-d 1表示递归深度  
     sar -n DEV 1 1    
     查看系统的网络状况  
     iostat -d -k    
     查看系统的IO  
     free -m    
     查看内存使用情况  
     swap过高,表示物理内存不够用  
     vmstat    
     查看当前swap的IO情况  
     扩展性    
     核心思想:模块化    
     降低模块间的耦合性  
     提高模块的复用性  
     分层和分割,以消息传递和依赖调用聚合成完整系统  
     分布式队列  
     分布式服务  
     伸缩性    
     网站架构伸缩    
     不同功能物理分离  
     相同功能集群伸缩  
     负载均衡器    
     DNS域名解析负载均衡,缺点是失效转移存在一定的时效性  
     反向代理(应用层负载均衡)    
     NGINX,七层负载,5万/每秒  
     数据链路层负载均衡    
     LVS,四层负载,80万/每秒  
     负载均衡算法    
     轮询  
     加权轮询  
     负载最低优先    
     LVS可以以连接数来判断  
     Nginx可以以HTTP请求数来判断  
     性能最优    
     响应最快,性能最优  
     原地址散列(哈希)  
     分布式缓存集群    
     一致性性Hash算法  
     数据存储服务器集群    
     关系型数据库集群    
     读写分离  
     分库    
     不同业务部署在不同的集群  
     分片    
     单表拆分,存在多个库中  
     支持数据分片的中间件:Cobar,缺点是只能在单一数据库
实例上处理查询请求,无法执行跨库的Join操作
    实例上处理查询请求,无法执行跨库的Join操作
 NoSql    
     HBase    
     以HRegion为单位进行管理  
     HDFS分布式文件系统  
     高性能    
     WEB前端    
     浏览器访问优化    
     浏览器缓存    
     设置http头中的Cache-Control  
     设置http头中的Expires  
     页面压缩  
     合理布局    
     CSS放在页面最上面  
     js放在最下边  
     减少cookie传输    
     减少数据量  
     静态资源独立域名  
     减少Http请求    
     合并css  
     合并js  
     合并图片  
     CDN加速    
     缓存静态资源,如图片、文件等  
     反向代理  
     动静分离    
     js、css等文件独立部署,使用专门的域名  
     图片服务
    
     用户上传,独立部署  
     反向代理    
     提供页面缓存  
     DNS    
     DNS负载均衡  
     应用服务器    
     异步操作    
     削峰  
     加快响应速度  
     使用集群  
     代码优化    
     多线程  
     资源服用    
     单例模式  
     对象池  
     JVM垃圾回收    
     新生代    
      Eden Space    
     新建对象总是在该区创建,当空间满,触发Young GC,将还未使用的独享复制到From区,Eden区则清空  
     From    
     当Eden区再次用完,再触发Young GC,将Eden和From区未使用的对象复制到To区  
     To    
     当Eden区再次用完,触发Young GC,将Eden和To区未使用的对象复制到From区,如此反复  
     老年代    
     经过多次Young GC,某些对象会在From和To多次复制,如果超过某个阈值对象还未释放,则将该对象复制到老年区。如果老年区空间用完,就会触发Full GC  
     JVM    
     堆heap    
     存储对象的内存空间,对象的创建和释放、垃圾回收都在这里进行  
     栈stack    
     存储线程上下文信息,如方法参数、局部变量等  
     存储性能优化    
     RAID    
     RAID0    
     将磁盘数量分成N份,数据同时并发写入N块磁盘,速度快,缺点是没有备份  
     RAID1    
     一份数据同时写入两块磁盘,有备份  
     RAID10    
     RAID0与RAID1的结合,缺点是磁盘利用率低  
     RAID3    
     数据分成N-1份,并发写入N-1块磁盘,在第N块磁盘记录校验数据,缺点是第N块磁盘在频繁修改情况下容易损坏,实践中很少使用  
     RAID5    
     与RAID3不同的是,将第N块磁盘记录校验的数据写入所有的磁盘,避免同时写坏一个磁盘  
     RAID6    
     类似RAID5,但是数据只写入到N-1块磁盘,螺旋式的将校验数据写入在两块磁盘中  
     存储算法    
     B+树(传统关系型数据库)  
     LSM树(NOSQL)  
     HDFS分布式文件系统    
     NameNode,只有一个实例,负责数据分区的分配  
     DataNode,真正存储数据的存储节点  
     关系型数据库    
     读写分离  
     分库    
     问题    
     join操作问题  
     事物问题  
     成本问题  
     单台数据库服务器一般来说能支撑10万用户量级的业务  
     分表    
     垂直分表    
     将表中某些不常用且占了大量空间的列拆分出去  
     水平分表    
     参考:单表超过五千万条建议分表  
     路由算法    
     范围路由    
     选取有序的数据列作为路由条件,不同分段分散到不同的数据库表中  
     复杂点在于分段大小的选取上,建议分段大小在100万到2000万之间  
     优点:可随数据的增加平滑地扩充新的表  
     缺点:分布不均匀。新扩充的表数据量一开始很少  
     Hash路由    
     复杂点在于初始表数量的选取上  
     优点:表分布比较均匀  
     缺点:扩充新表很麻烦,数据需要重新分布  
     配置路由    
     新建一张单独的表记录路由信息  
     优点:设计简单,扩充表时只需要迁移指定数据,修改路由表  
     缺点:必须多查询一次路由表,影响整体性能  
     问题    
     join操作    
     进行多个表的join查询,将结果合并  
     count()操作    
     count相加    
     对每个表进行count,最后结果相加  
     缺点:性能低  
     记录数表    
     新建表,包含table_name,row_count两个字段  
     每次插入或删除成功后,更新记录数表,缺点是增加性能开销  
     不要求精确的业务,可通过定时任务更新  
     order by操作    
     分别查询每个子表中的数据,然后汇总进行排序  
     实现方式    
     程序代码封装    
     TDDL(淘宝)  
     ShardingJDBC(当当)  
     中间件    
     mycat  
     mysql router  
     atlas(奇虎360)  
     NoSQL    
     Redis(K-V存储)    
     两种持久化方式    
     RDB    
     只备份当前内存中的数据集,事物执行完毕并不立即写入磁盘  
     AOF    
     先执行命令,成功后立即将命令追加到日志文件,也可能丢失命令数据  
     MongoDB(文档数据库)    
     特点:no-schema  
     优点:    
     新增字段简单,存储json格式的复杂数据  
     缺点:    
     不支持事物  
     无法实现join  
     HBase(列式数据库)    
     优点:    
     节省IO,因为每次只查一列,数据量小  
     比行式数据库更高的存储压缩比  
     缺点:    
     存储不连续,遇到修改操作性能很差  
     更新时需要将数据解压后更新,然后再压缩,写入磁盘  
     场景:    
     离线的大数据分析和统计  
     Elasticsearch(全文搜索引擎)    
     原理:    
     倒排索引(反向索引),建立单词到文档的索引  
     Elasticsearch是分布式的文档存储方式,它能够存储和检索复杂的数据结构。  
     为了让搜索引擎支持关系型数据库的全文搜索,需要将关系型数据转换为文档数据  
     分布式缓存    
     场景    
     需要经过复杂运算得到的数据  
     读多写少,很少变化  
     不适合缓存    
     频繁修改的数据  
     没有热点的数据  
     设置失效时间  
     缓存雪崩    
     更新锁    
     分布式环境下,对缓存更新操作进行加锁保护,保证只有一个线程能够进行操作  
     后台更新    
     缓存有效期设置为永久,后台定时更新    
     通过定时读取缓存,判断缓存是否存在  
     业务线程发现缓存丢失后,通过消息队列通知后台  
     缓存预热    
     系统上线时将热点数据加载好  
     缓存穿透    
     存储数据不存在:造成数据库压力,应对策略是将不存在的数据缓存起来  
     数据生成耗费大量时间和资源  
     缓存热点    
     很多业务请求都命中同一份缓存  
     解决方案是复制多份缓存,将请求分散到多台服务器  
     文件存储    
     小文件    
     HBase  
     Hadoop  
     Hypertable  
     FastDFS  
     未开源:TFS(淘宝)、JFS(京东)、Haystack(Facebook)  
     大文件    
     Hadoop  
     HBase  
     Storm  
     Hive  
     安全性    
     XSS跨站脚本攻击    
     防御    
     消毒:特殊字符进行转译  
     HttpOnly:对于存放敏感信息的cookie,可通过对该Cookie添加HttpOnly属性  
     分类    
     反射型:发布带攻击的链接  
     持久型:将攻击信息存到服务器数据库中  
     注入攻击    
     分类    
     SQL注入  
     OS注入  
     防御    
     消毒:特殊字符转译  
     参数绑定:sql预编译和参数绑定  
     CSRF跨站点请求伪造    
     核心:利用了浏览器的Cookie或服务器Session策略  
     防御    
     表单Token  
     验证码  
     Referer check  
     将cookie设置为HttpOnly  
     DDoS    
     SYN Flood    
     基于TCP的三次握手,攻击者伪造大量IP地址给服务器发送SYN报文,导致服务器接收不到客户端的ACK,服务器需要分配资源来维护本次握手,并不断重试。当等待队列占满后,服务器不再接收新的SYN请求。  
     DNS Query Flood    
     向被攻击的服务器发送海量的域名解析请求。  
     CC    
     基于HTTP协议发起,通过控制大量肉鸡和互联网上大量的代理,模拟正常用户给网站发起请求,直到网站拒绝服务。  
     从应用层发起,与网站的业务紧密相连,使防守方进行过滤的时候进行大量的误杀,真正业务无法处理。  
     其他攻击手段    
     Error Code    
     程序内部错误,浏览器打印堆栈信息    
     防御:配置Web服务器参数,跳转到500的专用错误页面  
     Html注释    
     注释显示在客户端,给黑客攻击造成便利    
     防御:代码Review,删除注释  
     文件上传    
     利用文件上传功能上传可执行程序,进而控制服务器    
     防御:设置上传文件白名单,只允许上传可靠文件类型,判断文件上传类型,使用“魔数”  
     文件单独存储  
     路径遍历    
     在请求的URL中使用相对路径,遍历未开放的目录及文件    
     防御:静态资源独立部署,其他资源不使用静态URL访问,动态参数不包含文件路径信息  
     防火墙    
     ModSecurity,开源  
     SiteShell  
     深信服  
     加解密    
     单向散列加密(摘要算法)    
     MD5  
     SHA-1  
     对称加密    
     加密与解密使用同一个密匙,远程通信的密匙交换是难题  
     DES    
     56位  
     3DES  
     AES    
     AES-128  
     AES-192  
     AES-256  
     RC  
     非对称加密    
     算法RSA    
     位数越大,加解密速度越慢  
     信息安全传输:公钥加密,私钥解密  
     数字签名(不可抵赖):私钥加密,公钥解密    
     发送发:将内容生成摘要,再用私钥将摘要进行加密生成数字签名,最后将数字签名和原文内容传输给接收方。  
     接收方:将原文内容采用相同的摘要算法生成摘要,再用公钥将数字签名解密成发送方的摘要,最后将两个摘要对比即可确认真伪。  
     算法    
     MD5withRSA  
     SHA1withRSA  
     数字证书    
     证书管理    
     keytool    
     Java的数字证书管理工具  
     OpenSSL    
     进行证书的签发与证书链的管理  
    
 
 
 
 
  0 条评论
 下一页
  
   
  
  
  
  
  
  
  
  
  
  
 