一、如何设计
1.提出设计
要想设计好一个架构,首先要考虑全面且不能漏下重要需求。可以借助于UML或者产品DEMO图梳理思路,让整个产品在自己头脑内部形成一个清晰完整的形象,等到这时候你就可以着手设计方案了。
设计方案最好设计3~5个,这个范围的数量可以考虑周全而不用耗费过多的精力时间。方案之间的差别不能只是参数或配置的区别,如果只是修改参数就可以完成另一个方案,那么根据这些参数已经可以选择出一个较优方案,不会是同时入选。
方案设计不要局限于经常使用或熟悉的技术,这个要平时多积累,多接触潮流技术并关注技术热点,也许其中一个会是方案最好的选择。
2.设计评估
在列出了每个方案的关键属性点之后,在研发部门范围内,集思广益,探讨项目的优劣,抉出最终方案。如果所有方案均不可行,那么需要看看是遗漏了哪个关键技术点还是关键属性,重新制定设计方案并进行新一轮的设计评估。
二、设计要点
1.设计数据库的时候,要确认以下几点:
①表格设计是否有ER图展示
②采取分表需要解决下列问题:
1)join操作
2)count操作
3)order by操作
③采取分库需要解决下列问题:
1)join操作
2)事务问题
3)成本问题
④是否读写分离
⑤是否建立主备数据库并支持主备倒换
⑥数据复制的实现过程是否有漏洞
⑦采用关系数据库会有下列缺陷:
1)无法存储数据结构(可用Redis代替)
2)schema扩展不便(可用MongDB代替)
3)大数据IO高,列数据都会放入缓存(可用HBase代替)
4)全文搜索弱(用ElasticSearcn)
2.设计服务器:是否需要采用集群,建议在确定系统没有优化空间后再考虑。
3.设计方案最好不要过于复杂:这样实施的时候难度不会太大,也不容易出错,建议方案分步骤、分阶段、分系统设计执行。
4.不要过度设计,一个产品若没有用户积累,却设想流量暴增100倍之后的情况,不仅增加了项目的复杂度,还消耗了大量的资源,在维护的时候将苦不堪言。
篇后语:老实说,我目前还未达到架构师的水准,这是在学习《从0开始学架构》后的第一篇总结性博客,之后陆续还会再系统性的分享几篇,尽量保证覆盖全面的架构知识。大部分是干货,希望大家能有所获。而有不足的地方,也请留下宝贵的建议。