哲學家常思考的問題:" 我是誰?"" 我從哪裡來?"" 要到哪裡去?不只是哲學家,我想每個人都有自己對這三個問題的認知。
如果我們要成為架構師,我們自己要面臨的三大問題:
找准自己定位:我是誰?在哪裡?
怎樣做好架構師:我要做什麼?
如何搭建架構師知識體系:我該怎麼做?
這裡面就是做事方法論:目標(我要做什麼),方法(計劃)(我該怎麼做), 執行/行動
要成為優秀合格的架構師,必須具備前瞻性的眼光和系統性的思考能力。而擁有這些能力的前提是你必須完善自己的知識體系。
網際網路思維不是工具,它是世界觀。這篇文章之後,你可以嘗試構建自己的知識體系了。
願每個人都可以像一個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、基礎知識
計算基礎
計算機原理
數據結構和常用算法
作業系統:進程,線程,內存
網絡
TCP/IP協議
TCP/IP網絡模型
HTTP協議原理
網絡IO模型
Socket網絡編程
2、程式語言
java
java基礎類庫、異常
JVM原理和調優《深入理解java虛擬機》《java性能優化權威指南》
框架
並發《java並發編程實戰》
多線程
php
異常
常用框架
php
php基礎
常用框架
異常處理機制
深入php內核
3、程序設計
高質量編碼能力:
重用性
低耦合
可擴展性
可維護性
高性能
安全性高
面向對象編程:
MVC編程思想
掌握建模語言和建模工具:UML
面向對象思想
設計模式:
基礎設計模式和設計原則:單一職責、開放封閉原則等.
常用設計模式
重構
4、研發能力
瀑布模型:需求->需求分析->設計->開發->測試->上線->運維/運營
調試和解決問題能力
敏捷思想:快速疊代,任務細分,wiki更新
5、安全知識
web安全:xss,sql注入,ddos攻擊
安全維度:漏洞,風險,事件
https協議
安全書: 《黑客攻防技術寶典(Web實戰篇)》
《白帽子講Web安全》
《Web前端黑客技術揭秘》
《Web之困》
《SQL注入攻擊與防禦》
6、Linux知識
7、運維能力
監控
持續集成:jenkins
自動化運維工具:ansible,saltstack
虛擬化:kvm,vm
容器docker
雲技術openstack
DevOps
8、資料庫
基礎理論
資料庫設計的三大範式
MySQL原理
MySQL優化
mysql引擎:
InnoDB
MyISAM
NoSQL:redis/mongo
9、常用應用軟體
Web server:
Nginx
OpenResty
Apache Httpd
Tomcat:架構原理,調優方案
Jetty
消息隊列:
RabbitMQ
RocketMQ
ActiveMQ
Kafka
Redis 消息推送
ZeroMQ
RPC:
Dubbo
Thrift
gRPC
資料庫中間件:
DBproxy
Haproxy
軟體負載均衡:
幾種負載均衡算法: 輪詢、權重、負載、最少連接、QoS
DNS負載均衡
Nginx
LVS+Keepalived實現負載均衡
HAProxy
Haproxy+Keepalived+MySQL實現讀均衡負載
9、性能
性能優化方法論
容量評估
CDN 網絡
連接池
性能調優
10、大數據
大數據
Hadoop
Storm
Kafka Stream
11、工程化
maven
git
jenkins
三、架構基礎知識
1、架構演進
初始階段:LAMP,部署在一台伺服器
應用伺服器和數據伺服器分離
使用緩存改善性能
使用集群改善並發
資料庫地讀寫分離
使用反向代理和cdn加速
使用分布式文件和分布式資料庫
業務拆分
分布式服務
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、資料庫層設計
高可用資料庫架構
雙主架構
主從同步
讀寫分離
分表分庫
五、網際網路公司經典技術架構
1.Google.Facebook.eBay.Amazon
2.微博架構
3.百度架構
4.淘寶-阿里技術架構 @ 06334a3
5.微信-騰訊技術架構 @ 3804af3
6.美團-點評技術架構 @ fc3cfc8
7.網易.技術架構
A.分布式資料庫-數據平台-NoSQL
A.分布式文件系統-緩存
A.分布式系統-高可用
B.基礎架構-Docker-容器架構
B.基礎架構-FrontEnd
B.基礎架構-及時通訊-語音-視頻
B.基礎架構-日誌系統
B.基礎架構-消息隊列
C.運維架構-安全
C.運維架構-自動化運維DevOps
D.機器學習-人工智慧
E.網際網路公司-架構演進
F.10 papers for architect
F.10 papers for programmer
G.程式語言
H.團隊與產品
I.性能優化
K.金融-支付
其他
網際網路公司經典技術架構
六. GitHub上整理的一些工具和資源
2.1技術站點
Hacker News:非常棒的針對編程的連結聚合網站
Programming reddit:同上
MSDN:微軟相關的官方技術集中地,主要是文檔類
infoq:企業級應用,關注軟體開發領域
OSChina:開源技術社區,開源方面做的不錯哦
51cto,cnblogs:常見的技術社區,各有專長
stackoverflow:IT技術問答網站
GitHub:全球最大的原始碼管理平台,很多知名開源項目都在上面,如Linux內核
OpenStack等免費的it電子書:http://it-ebooks.info/
DevStore:開發者服務商店
2.2 不錯的書籍
人件
人月神話
代碼大全2
電腦程式設計藝術
程式設計師的自我修養
程式設計師修煉之道
高效能程式設計師的修煉(成為一名傑出的程式設計師其實跟寫代碼沒有太大關係)
深入理解計算機系統
軟體隨想錄
算法導論(麻省理工學院出版社)
離線數學及其應用
設計模式
編程之美
黑客與畫家
編程珠璣
C++ Prime
Effective C++
TCP/IP詳解
Unix 編程藝術
《精神分析引論》弗洛伊德
搞定:無壓力工作的藝術
2.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系統
2.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繪圖庫,後來發現百度指數的圖形就是用它繪出來的
如果覺得東西有用的同學麻煩轉發和關注一下在此萬分感謝