本系列文章都已首发腾讯云+社区。
当你在面对系统设计无论是面试官考察,亦或者是自己设计系统的时候,需要考虑如下几点内容:
● 现状痛点描述清楚
● 核心模块(抽象模块以及核心指标是为了解决痛点,并且平衡取舍后的最合适方案)
● 系统设计规模粗略估算(系统规模、多少存储空间、网络带宽使用情况)
● 定义数据模型(抽象建模-实体、属性、联系)以及选择合适的数据库
● 高级设计(端到端的核心系统模块设计)
● 详细设计(如何做的负载,哪一层加的缓存,热数据、数据库表如何设计存储)
● 识别和解决技术难点(单点故障、容灾、副本备份、多活、监控等)
● 归纳总结(可扩展点以及更深的思考)
《系统设计:URL短链设计·案例参考分享邀请链接或者加密链接邀请》
《系统设计:照片共享设计·案例参考微博或者小红书等内容共享》
《系统设计:文件托管服务设计·案例参考Github或者码云》
《系统设计:即时消息服务设计·案例参考QQ或者微信通讯服务》
《系统设计:社交网络服务设计·案例参考Twitter或者微博》
《系统设计:视频共享服务设计·案例参考YouTube或者B站等》
《系统设计:实时预测服务设计·案例参考搜狗输入法预测或者百度搜索预测》
《系统设计:API限流器设计·案例参考各个公司的网关限流系统》
《系统设计:Feed流服务设计·案例参考Facebook新闻流》
《系统设计:附近人和地点服务设计·案例参考Yelp或者大众点评》
《系统设计:附近人和物匹配服务设计·案例参考Uber或者滴滴》
当我们设计一个大型系统时,我们需要考虑以下几点:
1.可以使用哪些不同的建筑构件?
2.这些部件如何相互配合?
3.我们如何最好地利用这些部分:什么是正确的权衡?
在需要之前投资于扩展性,通常不是明智的商业主张;然而,对设计进行一些前瞻性的思考可以在将来节省宝贵的时间和资源。在接下来的章节中,我们将尝试定义可伸缩系统的一些核心构建块。熟悉这些概念将大大有助于理解分布式系统的概念。在下一节中,我们将介绍一致性哈希、CAP定理、负载平衡、缓存、数据分区、索引、代理、队列、复制,以及在SQL和NoSQL之间进行选择。
与面试官谈特定场景,明确范围约束,以及我们应该如何制定用例验证
通过范围约束,以及用例验证,需要看清抽象的背后本质是什么?并进行建模画图
明确系统的扩展性,对于业务复杂性来说,更多场景我们要考虑的是其服务定位是什么?然后再以业务和技术作为底层驱动来判断我们的系统高可用、高性能、高扩展、高安全如何构建高并发系统,还需要考虑的是基于当前业务复杂度和技术复杂度前提下,如何权衡效率-成本-质量。
● 垂直缩放
● 水平缩放
● 缓存
● 负载均衡
● 数据库复制
● 数据库分区
系统设计系列到此先告一段落、后面会开启架构师系列、和业务中台建设系列。如果你也对这些感兴趣,可以加我(VX:lxc354555)一起成长。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。