程序员怎么讲架构?程序员的架构设计到底是什么
程序员怎么讲架构?程序员的架构设计到底是什么数据库服务器以主备方式部署多个节点,其中主库用于写入数据,备库用于读取数据,主备之间实时同步数据。应用服务器通过中间件(如Sharding-JDBC)访问主从数据库。应用服务器部署多个节点(集群化),并利用负载均衡服务器(如Nginx)对外提供服务。之所以有架构师这个称谓,主要还是公司发展以及大了的需要,需要专注于技术的人,你也可以理解为技术专家,攻克公司技术难题为主,例如淘宝的双11的挑战,以及公司发展需要考虑独立拆分,数据库压力太大,需要分布式缓存以及CDN的配合,怎么选择,怎么结合自己公司的情况攻克当前技术难题。这些人负责的技术范围大概是: 监控系统 、maven 私服、zookeeper、网关、消息中间件、缓存中间件 等等。为避免滥用缓存资源,可根据业务特性使用以下缓存过期策略:
高级程序员
一般是至少三年以上的工作经验,有些地方是五年以上,很多小公司或者创业公司,高级程序员覆盖的工作职责比较广,基本包含部分产品经理、项目经理的工作职责以外,最主要负责核心代码编程,基本技术难点都自己解决为主。
架构师
一般能做到架构师这个称谓,工作年限至少都在5年-8年以上,具体还看每个人的学习能力和领悟能力,以及成长情况(是否具备并发项目环境)。
之所以有架构师这个称谓,主要还是公司发展以及大了的需要,需要专注于技术的人,你也可以理解为技术专家,攻克公司技术难题为主,例如淘宝的双11的挑战,以及公司发展需要考虑独立拆分,数据库压力太大,需要分布式缓存以及CDN的配合,怎么选择,怎么结合自己公司的情况攻克当前技术难题。
这些人负责的技术范围大概是: 监控系统 、maven 私服、zookeeper、网关、消息中间件、缓存中间件 等等。
1)缓存为避免滥用缓存资源,可根据业务特性使用以下缓存过期策略:
- 缓存自动过期
- 缓存触发过期(例如在用户登出系统时删除缓存的用户信息)
应用服务器部署多个节点(集群化),并利用负载均衡服务器(如Nginx)对外提供服务。
3)读写分离、分库分表数据库服务器以主备方式部署多个节点,其中主库用于写入数据,备库用于读取数据,主备之间实时同步数据。应用服务器通过中间件(如Sharding-JDBC)访问主从数据库。
我们公司用的是阿里云的RDS 数据库
4)分布式文件系统用户一天天增加,业务量越来越大,产生的文件越来越多,单台的文件服务器已经不能满足需求,这时就需要分布式文件系统的支撑,例如FastDFS。
比如:图片 pdf 地上传 和 获取
5)NoSQL数据库对于海量数据的查询和分析,我们使用 NoSQL 数据库加上搜索引擎可以达到更好的性能。
常用的 NoSQL 有 MongoDB、HBase、Redis,搜索引擎有 Lucene、Solr、Elasticsearch。
这个 每个公司的 实际情况不一样, 我们公司主要是 用 redis 和 Elasticsearch,当然 由于业务的特殊,会有自主开发的搜索宽表(垂搜)
6)消息队列使用消息队列,可达到如下效果:
异步I/O
利用消息队列的发布-订阅机制,将数据库写入、文件写入等耗时的操作改为异步方式处理,从而大大提高对外接口的响应速度。
流量削峰
将突发的大流量请求缓存到消息队列中,避免过高的并发导致下游子系统瘫痪。
子系统解耦
利用消息队列的发布-订阅机制,消息生产者只负责发布可能有人感兴趣的消息,消息消费者只订阅自己感兴趣的消息,子系统之间无需调用任何接口即可完成数据的传递,从而实现基于弱关系的松耦合架构。
我们公司用的阿里的 rocketmq
其他的就是一些 系统高可用、高可靠 设计: 冗余、灾备 监控、告警 应急预案 限流 降级