架构师-第一阶段:技术选型
1、创业初期,技术如何选型?
- 选择 PHP体系 或者 Java体系
- 早起尽快引入 DAO/ORM 技术
2、要不要自研,什么时候自研?
- 早期不建议自研,以“快速迭代”为最高优先级
- 控制技术栈,尽量统一技术栈,不能各个团队用不同的技术栈;除非项目需要,否则不使用不同的技术栈
- 浅浅得封装一层,会为后期开发带来巨大好处。
例如以下代码:
String Memcache::get(String key)
String Memcache::set(String key, String value)
String Memcache::del(String key)
改为:
String CacheService::get(String key){
String result = Memcache::get(key);
return result;
}
String CacheService::set(String key, String value){
String result = Memcache::set(key, value);
return result;
}
String CacheService::del(String key){
String result = Memcache::del(key);
return result;
}
- 适当造一些轮子
- 不同技术团队,痛点是相似的
- 开源解决不了全部个性化需求
- 自研解决痛点,更贴合团队实际情况
3、容量设计,架构师的基本功
- 什么情况要进行容量评估?
- 如何进行容量评估?
- 1、评估总访问量:(询问产品、运营)
- 2、评估平均吞吐量:(每天按照 4w 秒算)
- 3、评估系统高峰 qps:(80%的请求发生在 20%的时间内)
- 4、评估单机极限 qps:(进行压力测试)
- 5、根据线上冗余度做决策:(计算需求与线上冗余度差值)
4、伪分布式架构(多机架构),快速扩容的必备方案
- 三大分离
- 读写分离(数据库读写分离)
- 动静分离(动态资源和静态资源分离,例如 css,jpg,静态页面放在单独的机器上)
- 前台后台分离(用户系统和运营系统分离)
- 遗留问题:
- 耦合问题,一个子系统挂了,仍然是全站挂。如何解决?业务垂直拆分。
- 主从延时,读写分离只能提升读写性能,无法降低库数据量
- 架构演进:垂直拆分,解耦