前言:
找准自己定位:我是谁?在哪里? 怎样做好架构师:我要做什么? 如何搭建架构师知识体系:我该怎么做?
哲学家常思考的问题:" 我是谁?"" 我从哪里来?"" 要到哪里去?不只是哲学家,我想每个人都有自己对这三个问题的认知。 如果我们要成为架构师,我们自己要面临的三大问题: 找准自己定位:我是谁?在哪里? 怎样做好架构师:我要做什么? 如何搭建架构师知识体系:我该怎么做? 这里面就是做事方法论: 目标(我要做什么),方法(计划)(我该怎么做), 执行/行动
俗话说,站在巨人的肩膀上看世界,一般学习的时候先总览全局,然后逐个部分个个击破,最后形成思路,了解具体细节。
互联网思维不是工具,它是世界观。这篇文章之后,你可以尝试构建自己的知识体系了。
愿每个人都可以像一个U盘一样,自带系统随处插拔。
愿每个人都可以和别人不一样。
一、通用技能表
1、做事方法论:目标、方法、执行。
我是谁:思维方式,不将就认真做事的人
如何做事:1)整体把握,找到方法论(解决方案),
2)思路:分而治之,优先排列,计划进行(排期完成)。
3)及时沟通,反馈,勇于承担责任
4)团队意识
成长:1)和优秀的人在一起
2)不断学习充电
完成定义:了解基础原理,自测通过,及时跟踪反馈问题,文档更新
做一个靠谱的人:“凡事有交代,件件有着落,事事有回音。”
2、思维结构:
《金字塔原理》、《结构化思维》、《系统思维》
3、文档能力:
熟练使用excel,ppt
4、团队协作
类似Trello的在线协同平台、 Slack、 微信、 例会
5、沟通能力:
6、业务能力:该行业和本公司的业务逻辑
7、计划推进能力:
质量控制、进度控制、人员组织、资源协调。
1)、能够有效的组织各类资源,通过说服、协调等方式得到相关部门或人员的支持,以使计划顺利的推行下去;
2)、说服力、协调力、推动力、监控与反馈
8、项目管理能力
架构评审
代码规范
代码 Review
看板管理
SCRUM
敏捷开发
极限编程(XP)
结对编程
FMEA管理模式
二、底层知识
1、基础知识
- 计算基础
<ul><li><span style="color:#3e3e3e;">计算机原理</span></li> <li><span style="color:#3e3e3e;"><a href="https://blog.csdn.net/hguisu/article/category/1054628">数据结构和常用算法</a></span></li> <li><span style="color:#3e3e3e;"><span style="color:#3e3e3e;"><a href="https://blog.csdn.net/hguisu/article/category/1253451">操作系统:进程,线程,内存</a></span></span></li> </ul></li>
- 网络
<ul><li><span style="color:#3e3e3e;"><a href="https://blog.csdn.net/hguisu/article/category/1112019">TCP/IP协议</a></span></li> <li><span style="color:#3e3e3e;"><span style="color:#3e3e3e;"><a href="https://blog.csdn.net/hguisu/article/details/7249611">TCP/IP网络模型</a></span></span></li> <li><span style="color:#3e3e3e;"><a href="https://blog.csdn.net/hguisu/article/details/8680808">HTTP协议原理</a></span></li> <li><a href="https://blog.csdn.net/hguisu/article/details/7453390">网络IO模型</a></li> <li><a href="https://blog.csdn.net/hguisu/article/category/1122753">Socket网络编程</a></li> </ul></li> <li><span style="color:#3399ea;">linux知识</span></li>
三、专业技能
2、编程语言
- java
<ul><li><a href="https://blog.csdn.net/hguisu/article/details/7644395">java基础类库</a>、<a href="https://blog.csdn.net/hguisu/article/details/6155636">异常</a></li> <li>JVM原理和调优《深入理解java虚拟机》《java性能优化权威指南》</li> <li>框架</li> <li>并发《java并发编程实战》</li> <li><a href="https://blog.csdn.net/hguisu/article/details/7490616">多线程</a></li> </ul></li> <li>php/python <ul><li>php/python基础</li> <li>常用框架</li> <li>异常处理机制</li> <li><span style="color:#3e3e3e;">深入php内核</span></li> </ul></li>
2、程序设计
- 高质量编码能力:
<ul><li><span style="color:#3e3e3e;">重用性</span></li> <li><span style="color:#3e3e3e;">低耦合</span></li> <li><span style="color:#3e3e3e;"><span style="color:#3e3e3e;">可扩展性</span></span></li> <li><span style="color:#3e3e3e;"><span style="color:#3e3e3e;"><span style="color:#3e3e3e;">可维护性</span></span></span></li> <li><span style="color:#3e3e3e;"><span style="color:#3e3e3e;"><span style="color:#3e3e3e;"><span style="color:#3e3e3e;">高性能</span></span></span></span></li> <li><span style="color:#3e3e3e;"><span style="color:#3e3e3e;"><span style="color:#3e3e3e;"><span style="color:#3e3e3e;"><span style="color:#3e3e3e;">安全性高</span></span></span></span></span></li> </ul></li> <li><span style="color:#3e3e3e;"><span style="color:#3e3e3e;">面向对象编程</span>:</span> <ul><li><span style="color:#3e3e3e;">MVC编程思想</span></li> <li><span style="color:#3e3e3e;"><a href="https://blog.csdn.net/hguisu/article/details/7609483">掌握建模语言和建模工具:UML</a></span></li> <li>面向对象思想</li> </ul></li> <li><span style="color:#3e3e3e;"><a href="https://blog.csdn.net/hguisu/article/category/1133340"><span style="color:#3e3e3e;">设计模式</span>:</a></span> <ul><li><span style="color:#3e3e3e;"><a href="https://blog.csdn.net/hguisu/article/details/7571617">基础设计模式和设计原则</a>:<span style="color:#3e3e3e;">单一职责、开放封闭原则等.</span></span></li> <li><span style="color:#3e3e3e;"><a href="https://blog.csdn.net/hguisu/article/category/1133340">常用设计模式</a></span></li> <li><a href="https://blog.csdn.net/hguisu/article/category/1152364">重构</a></li> </ul></li>
3、安全知识
- web安全:xss,sql注入,ddos攻击
- 安全维度:漏洞,风险,事件
- https协议
- 安全书: 《黑客攻防技术宝典(Web实战篇)》
《白帽子讲Web安全》
《Web前端黑客技术揭秘》
《Web之困》
《SQL注入攻击与防御》
4、运维能力
- 监控
- 持续集成:jenkins
- 自动化运维工具:ansible,saltstack
- 虚拟化:kvm,vm
- 容器docker
- 云技术openstack
- DevOps
5、数据库
- 基础理论
- 数据库设计的三大范式
- MySQL原理
- MySQL优化
- mysql引擎:
- InnoDB
- MyISAM
- NoSQL:redis/mongo
6、常用应用软件
- Web server:
<ul><li>Nginx</li> <li>OpenResty</li> <li>Apache Httpd</li> <li>Tomcat:架构原理,调优方案</li> <li>Jetty</li> </ul></li>
- 消息队列:
<ul><li>RabbitMQ</li> <li>RocketMQ</li> <li>ActiveMQ</li> <li>Kafka</li> <li>Redis 消息推送</li> <li>ZeroMQ</li> </ul></li>
- RPC:
<ul><li>Dubbo</li> <li>Thrift</li> <li>gRPC</li> </ul></li> <li>数据库中间件<span style="color:#3e3e3e;">:</span> <ul><li><span style="color:#24292e;">DBproxy</span></li> <li>Haproxy</li> </ul></li> <li><span style="color:#3e3e3e;">软件负载均衡:</span> <ul><li>几种负载均衡算法: 轮询、权重、负载、最少连接、QoS</li> <li>DNS负载均衡</li> <li>Nginx</li> <li>LVS+Keepalived实现负载均衡</li> <li>HAProxy</li> <li>Haproxy+Keepalived+MySQL实现读均衡负载</li> </ul></li>
7、性能调优
- 性能优化方法论
- 容量评估
- CDN 网络
- 连接池
- 性能调优
8、大数据
- 大数据
- Hadoop
- Storm
- Kafka Stream
9、工程化
- maven
- git
- jenkins
三、架构基础知识
1、架构演进
- 单体应用
- 分布式
- 微服务
2、架构模式
- 分层:横向分层:应用层,服务层,数据层
- 分割:纵向分割:拆分功能和服务
- 分布式
- 分布式应用和服务
-
分布式静态资源
- 分布式数据和存储
- 分布式计算
- 集群:提高并发和可用性
- 缓存:优化系统性能
- cdn
- 方向代理访问资源
- 本地缓存
- 分布式缓存
- 异步:降低系统的耦合性
- 提供系统的可用性
- 加快响应速度
- 冗余:冷备和热备,保证系统的可用性
- 自动化:发布,测试,部署,监控,报警,失效转移,故障恢复
- 安全:
3、架构核心要素
- 高性能:网站的灵魂
- 性能测试
- 前端优化
- 应用优化
- 数据库优化
- 可用性:保证服务器不宕机,一般通过冗余部署备份服务器来完成
- 负载均衡
- 数据备份
- 自动发布
- 灰度发布
- 监控报警
- 伸缩性:建集群,是否快速应对大规模增长的流量,容易添加新的机器
- 集群
- 负载均衡
- 缓存负载均衡
- 可扩展性:主要关注功能需求,应对业务的扩展,快速响应业务的变化。是否做法开闭原则,系统耦合依赖
- 分布式消息
- 服务化
- 安全性:网站的各种攻击,各种漏洞是否堵住,架构是否可以做到限流作用,防止ddos攻击。
- xss攻击
- sql注入
- csr攻击
- web防火墙漏洞
- 安全漏洞
- ssl
四、架构设计
1、设计原则
- 1、冗余设计
- 2、回滚设计
- 3、监控设计
- 4、故障隔离
- 5、可独立部署
- 6、无状态设计
- 7、成熟技术
- 8、异步设计
- 9、禁用设计
- 10、服务可降级
- 11、服务可限流
- 12、水平扩展
2、接入层设计
- DNS轮询
- 动静分离
- 方向代理:LVS,NGINX
- CDN
- 接入层安全:DNS劫持、限流,防刷。
3、应用层设计
- 通信机制:RPC,MQ
- 异步
- 连接池
- 配置中心
4、数据库层设计
- 高可用数据库架构
- 双主架构
- 主从同步
- 读写分离
- 分表分库
五、互联网公司经典技术架构
六. GitHub上整理的一些工具和资源
1技术站点
- Hacker News:非常棒的针对编程的链接聚合网站
- Programming reddit:同上
- MSDN:微软相关的官方技术集中地,主要是文档类
- infoq:企业级应用,关注软件开发领域
- OSChina:开源技术社区,开源方面做的不错哦
- 51cto,cnblogs:常见的技术社区,各有专长
- stackoverflow:IT技术问答网站
- GitHub:全球最大的源代码管理平台,很多知名开源项目都在上面,如Linux内核
- OpenStack等免费的it电子书:http://it-ebooks.info/
- DevStore:开发者服务商店
2 不错的书籍
- 人件
- 人月神话
- 代码大全2
- 计算机程序设计艺术
- 程序员的自我修养
- 程序员修炼之道
- 高效能程序员的修炼(成为一名杰出的程序员其实跟写代码没有太大关系)
- 深入理解计算机系统
- 软件随想录
- 算法导论(麻省理工学院出版社)
- 离线数学及其应用
- 设计模式
- 编程之美
- 黑客与画家
- 编程珠玑
- C++ Prime
- Effective C++
- TCP/IP详解
- Unix 编程艺术
- 《精神分析引论》弗洛伊德
- 搞定:无压力工作的艺术
3 平台工具(都是开源的好东东哦)
- Redmine/Trac:项目管理平台
- Jenkins/Jira(非开源):持续集成系统(Apache Continuum,这个是Apache下的CI系统,还没来得及研究)
- Sonar:代码质量管理平台
- git,svn:源代码版本控制系统
- GitLib/Gitorious:构建自己的GitHub服务器
- gitbook:https://www.gitbook.io/写书的好东西,当然用来写文档也很不错的
- Travis-ci:开源项目持续集成必备,和GitHub相结合,https://travis-ci.org
- 开源测试工具、社区(Selenium、OpenQA.org)
- Puppet:一个自动管理引擎,可以适用于Linux、Unix以及Windows平台。所谓配置管理系统,就是管理机器里面诸如文件、用户、进程、软件包这些资源。无论是管理1台,还是上万台机器Puppet都能轻松搞定。
- Nagios:系统状态监控报警,还有个Icinga(完全兼容nagios所有的插件,工作原理,配置文件以及方法,几乎一模一样。配置简单,功能强大)
- Ganglia:分布式监控系统
- fleet:分布式init系统
4 爬虫相关(好玩的工具)
- Phantomjs
- berserkJS(基于Phantomjs的改进版本)
- SlimerJS
- CasperJS
- selenium
2.4 Web 服务器性能/压力测试工具/负载均衡器
- http_load:程序非常小,解压后也不到100K
- webbench:是Linux下的一个网站压力测试工具,最多可以模拟3万个并发连接去测试网站的负载能力
- ab:ab是apache自带的一款功能强大的测试工具
- Siege:一款开源的压力测试工具,可以根据配置对一个WEB站点进行多用户的并发访问,记录每个用户所有请求过程的相应时间,并在一定数量的并发访问下重复进行。
- squid(前端缓存),nginx(负载),nodejs(没错它也可以,自己写点代码就能实现高性能的负载均衡器):常用的负载均衡器
- Piwik:开源网站访问量统计系统
- ClickHeat:开源的网站点击情况热力图
- HAProxy:高性能TCP /HTTP负载均衡器
- ElasticSearch:搜索引擎基于Lucene
- Page Speed SDK和YSLOW
- HAR Viewer:HAR分析工具
- protractor:E2E(end to end)自动化测试工具
2.5 Web 前端相关
- GRUNT:js task runner
- Sea.js:js模块化
- knockout.js:MVVM开发前台,绑定技术
- Angular.js:使用超动感HTML & JS开发WEB应用!
- Highcharts.js,Flot:常用的Web图表插件
- Raw:非常不错的一款高级数据可视化工具
- Rickshaw:图标库,可用于构建实时图表
- JavaScript InfoVis Toolkit:另一款Web数据可视化插件
- Pdf.js,在html中展现pdf
- ACE,CodeMirror:Html代码编辑器(ACE甚好啊)
- NProcess:绚丽的加载进度条
- impress.js:让你制作出令人眩目的内容展示效果(类似的还有reveal)
- Threejs:3DWeb库
- Hightopo:基于Html5的2D、3D可视化UI库
- jQuery.dataTables.js:高度灵活的表格插件
- Raphaël:js,canvas绘图库,后来发现百度指数的图形就是用它绘出来的