一、什么是架构我想这个问题,十个人回答得有十一个答案,因为另外的那一个是大家妥协的结果 。哈哈,我理解,架构就是骨架:
人类的身体的支撑是主要由骨架来承担的,然后是其上的肌肉、神经、皮肤 。架构对于软件的重要性不亚于骨架对人类身体的重要性 。
二、. 什么是设计模式这个问题我问过的面试者不下于数十次,回答五花八门,在我看来,模式就是经验,设计模式就是设计经验,有了这些经验,我们就能在特定情况下使用特定的设计、组合设计,这样可以大大节省我们的设计时间,提高工作效率 。
作为一个工作10年以上的老码农,经历的系统架构设计也算不少,接下来,我会把工作中用到的一些架构方面的设计模式分享给大家,望大家少走弯路 。总体而言,共有八种,分别是:
- 单库单应用模式:最简单的,可能大家都见过
- 内容分发模式:目前用的比较多
- 查询分离模式:对于大并发的查询、业务
- 微服务模式:适用于复杂的业务模式的拆解
- 多级缓存模式:可以把缓存玩的很好
- 分库分表模式:解决单机数据库瓶颈
- 弹性伸缩模式:解决波峰波谷业务流量不均匀的方法之一
- 多机房模式:解决高可用、高性能的一种方法
文章插图
如上图所示,这种模式一般只有一个数据库,一个业务应用层,一个后台管理系统,所有的业务都是用过业务层完成的,所有的数据也都是存储在一个数据库中的,好一点会有数据库的同步 。虽然简单,但是也并不是一无是处 。
- 优点:结构简单、开发速度快、实现简单,可用于产品的第一版等有原型验证需求、用户少的设计 。
- 缺点:性能差、基本没有高可用、扩展性差,不适用于大规模部署、应用等生产环境 。
文章插图
如上图所示,这种模式较单库单应用模式多了一个CDN、一个云存储OSS(七牛、又拍等雷同) 。一个典型的应用流程(以用户上传、查看图片需求为例)如下:
- 上传的时候,用户选择本地机器上的一个图片进行上传
- 程序会把这个图片上传到云存储OSS上,并返回该图片的一个URL
- 程序把这个URL字符串存储在业务数据库中,上传完成 。
- 查看的时候,程序从业务数据库得到该图片的URL
- 程序通过DNS查询这个URL的图片服务器
- 智能DNS会解析这个URL,得到与用户最近的服务器(或集群)的地址A
- 然后把服务器A上的图片返回给程序
- 程序显示该图片,查看完成 。
- 优点:资源下载快、无需过多的开发与配置,同时也减轻了后端服务器对资源的存储压力,减少带宽的使用 。
- 缺点:目前来说OSS,CDN的价格还是稍微有些贵(虽然已经降价好几次了),只适用于中小规模的应用,另外由于网络传输的延迟、CDN的同步策略等,会有一些一致性、更新慢方面的问题 。
这种模式的一般设计见下图:
文章插图
如上图所示,这种模式较单库单应用模式与内容分发模式多了几个部分,一个是业务数据库的主从分离,一个是引入了ES,为什么要这样?都解决了哪些痛点,下面具体结合业务需求场景进行叙述 。
推荐阅读
- 看都不懂的三层架构,到底要怎么理解?
- Nginx 为什么是高效服务器,架构设计是怎样的?
- PostgreSQL的几种分布式架构对比
- 解密微博红包:架构、防刷、监控和资源调度
- 排毒食物 八种排毒食物帮你清洁身体
- 给你百万年薪,让你担任公司的架构师,你知道该做哪些事吗?
- IT架构师的职责及架构思维
- 分布式系统之Redis主从架构
- 阿里P9架构师分享:通俗易懂Redis原理,都是你没看过的
- Linux系统架构-----Apache与Nginx动静分离