网站优化助手,徐州苏视在线,wordpress 同步 微信,网站建站咨询2019独角兽企业重金招聘Python工程师标准 当前在互联网的大潮下#xff0c;众所周知淘宝、京东这些交易系统每天产生的数据量都是海量的#xff0c;每天的交易并发也是惊人的#xff0c;尤其是“双11”、“6.18”这些活动#xff0c;对系统的峰值响应提出了非… 2019独角兽企业重金招聘Python工程师标准 当前在互联网的大潮下众所周知淘宝、京东这些交易系统每天产生的数据量都是海量的每天的交易并发也是惊人的尤其是“双11”、“6.18”这些活动对系统的峰值响应提出了非常高的要求所以对系统架构也就有了很要的要求。 在写这篇博客的前2天听说某系统在25人的用户量下就宕机了实在让人震惊所以捋了下互联网交易系统我们可以采取哪些技术来解决互联网平台下大数据量高并发的问题。 首先根据架构分层把不同技术进行了一些分类如下图 互联网技术架构分层策略图 接下来我会逐一解释各个技术的大概原理和思路供大家参考和学习 一、互联网层 1、负载均衡 负载均衡英文名称为Load Balance意思就是分摊到多个操作单元上进行执行例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等从而共同完成工作任务。 比如Nginx是一款可以通过反向代理实现负载均衡的服务器把流量导向不同的服务器现在的云平台都提供了负载均衡服务不过需要单独付费比如阿里的SLB。 2、内容分发网络(CDN) 内容分发网络基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节使内容传输的更快、更稳定。 通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络CDN系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。 其目的是使用户可就近取得所需内容解决Internet网络拥挤的状况提高用户访问网站的响应速度。这个不需要单独去实现可以用现成的产品去做比如: Akamai(好些比较贵)Verizon EdgeCast(便宜些)ChinaCach如果是云平台基本上都提供了这个服务不过也需要付费的比如阿里云基于自己的CDN加速提供了不同形式的加速比如基于P2P技术的PCDN增强防护DDoS、CC、Web应用攻击的SCDN以及全站加速。 二、Web服务器层 1、Session→Cookie 传统的B/S架构都是把用户会话放到Session里面在在线用户量不高的情况下没啥问题但是对于现在互联网采取了分布式或者微服务架构就很难单独去维护Session了因为Session会分布在不同的服务器上会话的同步会面临着很大的问题。所以一种方式是把Session的维护拿到Cookie里去做不依赖于某台或多台服务器同时也减少了服务器的开销。当然也可以利用内存缓存服务器来统一存储Session信息有的内存缓存服务器还能把内存数据持久化到磁盘来提高可用性和可恢复性就不会有同步问题了。 2、Static page 动态页面静态化为什么又要把动态网页以静态网页的形式发布呢一个很重要的原因就是搜索引擎另一个重要原因就是提高程序性能。 很多大型网站进去的时候看它页面很复杂但是加载也没有耗费多长时间原因在于先于用户获取资源或数据库数据进而通过静态化处理生成静态页面。所有人都访问这一个静态页面而静态化处理的页面本身的访问速度要较动态页面快很多倍因此程序性能会有大大的提升。使用场景是那些经常需要访问但是数据不经常更新的时候。这种情况就是时候将动态页面静态化了比如淘宝的宝贝信息页面页面动态部分可以用AJAX加载进来比如月销多少笔。 3、Cache 缓存Web服务层的缓存依赖于下面三个方面 浏览器端的缓存比如CSS/JS等在CDN这类技术当中做大量页面缓存来提高就近访问速度自己搭建内存缓存服务器对频率访问比较高的页面进行缓存比如首页等。4、Gzip 利用浏览器能自动进行Gzip解压缩的原理对访问页面和资源含图片、JavaScript、CSS等进行Gzip压缩减少文件大小以此来提高网络加载速度。 5、One file 原理是把多个需要加载的内容合成一个文件减少加载次数和网络连接时间提高访问效率比如把小图标集合合成一个大图片把CSS/JavaScript 合成到一个文件里面。 6、Cluster 集群和传统的高性能计算机技术相比计算机集群通过一组松散集成的计算机软件和/或硬件连接起来高度紧密地协作完成计算工作。在某种意义上它们可以被看作是一台计算机。 集群系统中的单个计算机通常称为节点通常通过局域网连接但也有其它的可能连接方式。集群计算机通常用来改进单个计算机的计算速度和/或可靠性。一般情况下集群计算机比单个计算机比如工作站或超级计算机性能价格比要高得多大多数集群采用主从式来管理集群节点比如Websphere Cluster。 和常见的分布式的不同点在于集群是同一个业务部署在多个服务器上分布式是一个业务分拆成多个子业务或者本身就是不同的业务部署在不同的服务器上。 简单地说分布式是以缩短单个任务的执行时间来提升效率而集群则是通过提高单位时间内执行的任务数来提升效率。 三、应用服务器或者业务服务器层 1、Distributed/分布式|SC/服务中心|微服务|Decouple/解耦 分布式系统是支持分布式处理的软件系统是由通信网络互联的多处理机体系结构上执行任务的系统。简单来说分布式处理就是多台相连的计算机各自承担同一工作任务的不同部分在人的控制下同时运行共同完成同一件工作任务。包括分布式操作系统、分布式程序设计语言及其编译系统、分布式文件系统、分布式数据库系统、分布式调度系统等。这常常伴随需要做负载均衡、熔断和限流等还得考虑是全量计算还是增量计算等。 所以随着分布式的发展微服务架构就变得越来越流行它的主要作用是将功能分解到离散的各个服务当中从而降低系统的耦合性并提供更加灵活的服务支持围绕业务领域组件来创建应用这些应用可独立地进行开发、管理和迭代。在分散的组件中使用云架构和平台式部署、管理和服务功能使产品交付变得更加简单所以业务的解耦和拆分的就变得越来越重要。 现在随着容器(Docker)的发展让分布式、微服务变得更加灵活和容易也让现在支持大数据量高并发提供了很好的基础设施。 2、Cache 这一层的缓存主要是对高频数据进行缓存比如对中间计算结果进行缓存而且是基于内存缓存居多比如Memcached和Redis有的还提供缓存持久化比如Redis。在分布式计算中经常要对批量数据进行缓存预读取以提高计算速度。 3、同步转异步/MQ 同步转异步的思路一方面不让进程或者线程阻塞在顺序执行里从而加快程序的执行就像Node.js用异步和Java用同步做相同计算测试好多时候速度Node.js比Java还快不信大家可以试试像双11的抢购都是采用了异步机制。 另一方面不让用户一直等在那里用户可以继续做别的事情等异步执行完毕通知用户。这里面大量用到了消息队列(MQ)流行的产品很多最早的WebsphereMQ到现在的Kafka、RabbitMQ有些甚至和流行的开源框架紧密集成比如RabbitMQ和SpringBoot。 四、数据访问、文件访问、内部网络访问层 1、读写分离 因为在大数据量并发情况下读的操作频率远远超过写操作所以通过读写分离来提高读的速度其思路是让主数据库master处理事务性增、改、删操作INSERT、UPDATE、DELETE而从数据库slave处理SELECT查询操作下面是淘宝最早的时候采用的读写分离策略 读写分离示意图 2、DB Cluster 集群就不再做过多说明数据库集群是利用至少两台或者多台数据库服务器构成一个虚拟单一数据库逻辑映像像单数据库系统那样向客户端提供透明的数据服务。其目的还是为了增加数据吞吐量提高数据库性能满足大数据量下对数据的读写速度要求。 阿里云的RDS云数据库就继承了上述2大特征外面看来是一个MySQL集群提供统一的透明访问而在内部就自动实现了读写分离为高性能数据库存储提供了很大便利。 3、分布式存储(DAS/NAS/SAN) 三种分布式存储方案大家可自行百度各种介绍比较比较多这里不再赘述比如阿里的OSS存储也是一种分布式存储。 4、Cache 缓存无处不在连CPU都有二级缓存在数据访问这一层可以根据你的数据需要充分利用缓存技术来提供读写速度比如对要求不是特别实时的大数据进行预统计分析然后缓存下来做报表等这个时候直接从缓存里读取即可提高统计速度。 5、NoSQLKey/Value NoSQL泛指非关系型的数据库。随着互联网Web2.0网站的兴起传统的关系数据库在应付Web2.0网站已经显得力不从心暴露了很多难以克服的问题而非关系型的数据库则由于其自身的特点高可扩展性、分布式计算、低成本、架构的灵活性、半结构化数据没有复杂的关系得到了非常迅速的发展。NoSQL数据库的产生就是为了解决大规模数据集合多重数据种类带来的挑战尤其是大数据应用难题。其数据库类型有列存储、文档存储、Key/Value存储、对象存储和图存储等。 6、Split/分割Partition/分区 表分区是DB对于非常大的表进行优化的一种有效方法是根据数据库定义不同的分区策略决定的比如取模、时间和哈希等是非常有效的一种手段在很多情况下比表分割更有效。 比如有一个代码表使用分区表把100万纪录分在10个分区中ID每从1到10万为一个分区那样写查询语句的时候只要给出查询条件中所需要的代码DB自动会定位到对应的分区进行查询大大降低的查询时间。 而采用表分割那必须先根据查询的代码指定所要查询的表才能找到相应的记录是由DBA或架构师根据业务需要来定义如何分割的。表分割分为水平分割和垂直分割 水平分割根据一列或多列数据的值把数据行放到两个独立的表中垂直分割把主码和一些列放到一个表然后把主码和另外的列放到另一个表中。7、BGP 边界网关协议主要用于互联网AS自治系统之间的互联BGP的最主要功能在于控制路由的传播和选择最好的路由。中国网通与中国电信都具有AS号自治系统号全国各大网络运营商多数都是通过BGP协议与自身的AS号来互联的。 使用此方案来实现双线路需要在CNNIC中国互联网信息中心申请IDC自己的IP地址段和AS号然后通过BGP协议将此段IP地址广播到移动网通、电信等其它的网络运营商使用BGP协议互联后移动。网通与电信的所有骨干路由设备将会判断到IDC机房IP段的最佳路由以保证移动、网通和电信用户的高速访问。现在不少的云平台都支持BGP。 五、总结 “缓存”、“异步”和“分”是互联网大数据量高并发下架构策略中用的最多的3种策略从上面各个技术层面“分”也是占据了大多数技术的核心思想所以考虑的时候要多想想分哪里、如何分另外很多业务场景还得想想怎么合。 顺便在此给大家推荐一个Java架构方面的交流学习群698581634里面会分享一些资深架构师录制的视频录像有SpringMyBatisNetty源码分析高并发、高性能、分布式、微服务架构的原理JVM性能优化这些成为架构师必备的知识体系主要针对Java开发人员提升自己突破瓶颈相信你来学习会有提升和收获。在这个群里会有你需要的内容 朋友们请抓紧时间加入进来吧。 转载于:https://my.oschina.net/u/3967312/blog/2223500