架構師成長之路 4 --架構師知識體系(方法)
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow
也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!
前言:
哲學家常思考的問題:" 我是誰?"" 我從哪裡來?"" 要到哪裡去?不只是哲學家,我想每個人都有自己對這三個問題的認知。如果我們要成為架構師,我們自己要面臨的三大問題:找準自己定位:我是誰?在哪裡?怎樣做好架構師:我要做什麼?如何搭建架構師知識體系:我該怎麼做? 這裡面就是做事方法論:目標(我要做什麼),方法(計劃)(我該怎麼做), 執行/行動
要成為優秀合格的架構師,必須具備前瞻性的眼光和系統性的思考能力。而擁有這些能力的前提是你必須完善自己的知識體系。
網際網路思維不是工具,它是世界觀。這篇文章之後,你可以嘗試構建自己的知識體系了。
願每個人都可以像一個U盤一樣,自帶系統隨處插拔。
願每個人都可以和別人不一樣。
一、通用技能表
1、做事方法論:目標、方法、執行。
我是誰:思維方式,不將就認真做事的人 如何做事:《金字塔原理》
《結構化思維》
系統思維
3、文件能力:熟練使用excel,ppt
4、協作
類似Trello的線上協同平臺
Slack
微信
例會
5、溝通能力:
6、業務能力: 該行業和本公司的業務邏輯 7、計劃推進:質量控制、進度控制、人員組織、資源協調。 1)、能夠有效的組織各類資源,通過說服、協調等方式得到相關部門或人員的支援,以使計劃順利的推行下去;
2)、說服力、協調力、推動力、監控與反饋
8、專案管理能力
架構評審
程式碼規範
程式碼 Review
看板管理
SCRUM
敏捷開發
極限程式設計(XP)
結對程式設計
FMEA管理模式
二、專業技能表
1、基礎知識- 計算基礎
- 計算機原理
- 資料結構和常用演算法
- 作業系統:程序,執行緒,記憶體
- java
- php
- 異常
- 常用框架
- php
- php基礎
- 常用框架
- 異常處理機制
- 深入php核心
- 高質量編碼能力:
- 重用性
- 低耦合
- 可擴充套件性
- 可維護性
- 高效能
- 安全性高
- 面向物件程式設計:
- MVC程式設計思想
- 掌握建模語言和建模工具:UML
- 面向物件思想
- 設計模式:
- 基礎設計模式和設計原則:單一職責、開放封閉原則等.
- 常用設計模式
- 重構
4、 研發能力
- 瀑布模型:需求->需求分析->設計->開發->測試->上線->運維/運營
- 除錯和解決問題能力
- 敏捷思想:快速迭代,任務細分,wiki更新
- web安全:xss,sql注入,ddos攻擊
- 安全維度:漏洞,風險,事件
- https協議
- 安全書: 《黑客攻防技術寶典(Web實戰篇)》
《白帽子講Web安全》
《Web前端黑客技術揭祕》
《Web之困》
《SQL注入攻擊與防禦》
6、Linux知識
7、運維能力- 監控
- 持續整合:jenkins
- 自動化運維工具:ansible,saltstack
- 虛擬化:kvm,vm
- 容器docker
- 雲技術openstack
- DevOps
- 基礎理論
- 資料庫設計的三大正規化
- MySQL原理
- MySQL優化
- mysql引擎:
- InnoDB
- MyISAM
- NoSQL:redis/mongo
- 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實現讀均衡負載
- 效能優化方法論
- 容量評估
- CDN 網路
- 連線池
- 效能調優
- 大資料
- Hadoop
- Storm
- Kafka Stream
11、工程化
- maven
- git
- jenkins
三、架構基礎知識
1、架構演進- 初始階段:LAMP,部署在一臺伺服器
- 應用伺服器和資料伺服器分離
- 使用快取改善效能
- 使用叢集改善併發
- 資料庫地讀寫分離
- 使用反向代理和cdn加速
- 使用分散式檔案和分散式資料庫
- 業務拆分
- 分散式服務
- 分層:橫向分層:應用層,服務層,資料層
- 分割:縱向分割:拆分功能和服務
- 分散式
- 分散式應用和服務
- 分散式靜態資源
- 分散式資料和儲存
- 分散式計算
- 叢集:提高併發和可用性
- 快取:優化系統性能
- cdn
- 方向代理訪問資源
- 本地快取
- 分散式快取
- 非同步:降低系統的耦合性
- 提供系統的可用性
- 加快響應速度
- 冗餘:冷備和熱備,保證系統的可用性
- 自動化:釋出,測試,部署,監控,報警,失效轉移,故障恢復
- 安全:
- 高效能:網站的靈魂
- 效能測試
- 前端優化
- 應用優化
- 資料庫優化
- 可用性:保證伺服器不宕機,一般通過冗餘部署備份伺服器來完成
- 負載均衡
- 資料備份
- 自動釋出
- 灰度釋出
- 監控報警
- 伸縮性:建叢集,是否快速應對大規模增長的流量,容易新增新的機器
- 叢集
- 負載均衡
- 快取負載均衡
- 可擴充套件性:主要關注功能需求,應對業務的擴充套件,快速響應業務的變化。是否做法開閉原則,系統耦合依賴
- 分散式訊息
- 服務化
- 安全性:網站的各種攻擊,各種漏洞是否堵住,架構是否可以做到限流作用,防止ddos攻擊。
- xss攻擊
- sql注入
- csr攻擊
- web防火牆漏洞
- 安全漏洞
- ssl
四、架構設計
1、設計原則- 1、冗餘設計
- 2、回滾設計
- 3、監控設計
- 4、故障隔離
- 5、可獨立部署
- 6、無狀態設計
- 7、成熟技術
- 8、非同步設計
- 9、禁用設計
- 10、服務可降級
- 11、服務可限流
- 12、水平擴充套件
- DNS輪詢
- 動靜分離
- 方向代理:LVS,NGINX
- CDN
- 接入層安全:DNS劫持、限流,防刷。
- 通訊機制:RPC,MQ
- 非同步
- 連線池
- 配置中心
- 高可用資料庫架構
- 雙主架構
- 主從同步
- 讀寫分離
- 分表分庫
五、網際網路公司經典技術架構
網際網路公司經典技術架構
六. 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繪相簿,後來發現百度指數的圖形就是用它繪出來的