摘要:随着智能设备的普及使得高并发场景越来越多,可扩展成为系统设计的必要条件,下面分别介绍下可扩展系统的四个重要组成部分一负载均衡可扩展性冗余容错水平扩展负载能力和增加硬件呈线性关系。目前大多数互联网公司均采用软件负载均衡。
肖立鹏原来在腾讯云做架构师,目前在Udesk担任CTO职位。下面是他分享的Udesk在可扩展高并发架构方面的一些实践经验。
随着智能设备的普及使得高并发场景越来越多,可扩展成为系统设计的必要条件,下面分别介绍下可扩展系统的四个重要组成部分
一、负载均衡——可扩展性&冗余容错水平扩展:负载能力和增加硬件呈线性关系。如果你有一台服务器并增加一台,负载能力翻 倍,再增加一台,负载能力增长33%。
冗余容错:一台服务器死机不会影响服务的正确性,只是降低系统的负载能力。
一般的冗余和水平扩展等,都可以通过负载均衡来实现。主要有3种实现方法:
客户端负载均衡:这里的客户端是广义的客户端,例如服务a调用服务b,我们认为服务a是客户端。客户端配置n个服务端的地址,采取Round-Robin或者其他随机策略访问服务端。优点是编码实现简单;缺点是变更困难,服务端迁移需要升级所有客户端配置,当然你可以搭建配置服务,这个服务本身也是单点,然后为配置服务实现负载均衡……
硬件负载均衡:购买专用的负载均衡器,例如Citrix NetScaler。优点:性能卓越; 缺点:昂贵,高富帅专用。
软件负载均衡:通过路由分发,心跳探测等方法,实现软件层面的负载均衡,典型的开源组件有:LVS,Nginx和HAProxy等。目前大多数互联网公司均采用软件负载均衡。
二、数据缓存缓存是一个系统中性能提升的关键。主要有5种实现方法:
应用层:应用自己在本地内存或其他介质中缓存部分数据,一般通过LRU算法淘汰。
数据库层:数据库引擎自身的缓存,需要DBA来配置优化,当然现在也有不少NoSQL的缓存+存储解决方案如MongoDB、带HandlerSocket插件MySQL、ttserver等。数据库缓存的好处是应用侧代码不需要更改。
内存缓存:目前的主流解决方案,代表有MemCached和Redis,Redis的优点是数据结构 丰富,可以轻松支持排名等场景,缺点是单进程实现导致持久化方案不够完美,今年4月Redis Cluster终于迎来了第一个稳定版本,可以实现数据自动sharding和容错,稳定性有待后续检验。
网页缓存:在Apache等HTTP服务器上,配置full-page cache等策略。
CDN:对于静态文件,一般采用CDN来加速。
使用缓存的过程中,必须要注意缓存有效性,在数据源更新后,要及时更新缓存中的数据。目前主要有read-through和write-through两种策略,采用write-through的多些。
三、离线处理对搜索引擎,广告推荐等数据分析类场景,必须对数据做离线处理。主要有3种主流的实现方法:
定期任务:每天每小时的任务,使用crontab或者其他cron服务来调度。
并行计算:采用MapReduce,其它主流开源组件有Hive,Impala等。
消息队列:任务排队,并发处理等,主流开源组件有RabbitMQ,Kafka。
四、平台建设提供给应用的,不是一堆组件,而是一组API,把底层架构隐藏起来。这样有两个主要的好 处:
底层架构重用,可支撑多应用,运营更方便。
应用和底层架构解耦合,底层架构可自我演进,是Scale的必备基础。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/25145.html
摘要:好的项目代码结构会大大提升项目的维护性和可扩展性。多说无益,我这里直接给大家一个示意图,大家可以按照我给的这个项目结构组织项目。你连文件目录都设计不好,我拿什么相信你能设计出来可扩展的程序 很多人都会用项目脚手架,也会跑hello world,然后再写写简单的todolist。但是再往下深入就难了。比如很多教程和老师都会说,大家要多问一个为什么。其实我想说多问你妹啊。我都不知道问为什么...
摘要:网易高级架构师谈,菜鸟如何发展成为架构师一方面是因为是知识密集型的行业。那作为一名开发者,如何规划自己的职业生涯呢一般来说,程序员的技术生涯会分为技术新人技术专家架构师个阶段,这也是我们的成长的路径。 作为一名程序员,大家都会为自己未来的职业发展焦虑。 网易高级Java架构师谈,菜鸟如何发展成为架构师一方面是因为IT是知识密集型的行业。 知识体系复杂且知识更新速度非常快,一日不学就会落...
摘要:第三部分对于参加工作年到年的同学。我当时看的是大话设计模式这本书,并且写了完整版的设计模式博客。这一年,你必须对于设计模式了如指掌,大话设计模式可以作为你的开端。与此同时,这个阶段你要做的事情还远不止如此。 这一部分其实也算是今天的重点,这一部分用来回答很多群里的朋友所问过的问题,那就是大佬你是如何学习Java的,能不能给点建议? 今天我是打算来点干货,因此咱们就不说一些学习方法和技巧...
阅读 2627·2021-11-18 10:07
阅读 1084·2021-08-03 14:04
阅读 728·2019-08-30 13:08
阅读 2580·2019-08-29 15:33
阅读 1089·2019-08-29 14:07
阅读 2987·2019-08-29 14:04
阅读 1438·2019-08-29 11:19
阅读 1146·2019-08-29 10:59