題圖:from pixabay

之前一篇《 如何從傳統軟件開發順利過渡到互聯網技術開發 》,時隔一年,再重新延伸下本文,使其更具有可操作性。

為什么要轉型呢?云計算的盛行,導致很多產品已經云化。另外,長期專注于業務開發導致技術人員自覺乏味,沒有提升空間,自我存在感、成就感大幅下降,而互聯網、移動互聯網、物聯網、大數據、人工智能等一波又一波的浪潮,一個又一個造富神話,充滿了吸引力,并且有很大的成長空間。

本文也是基于前文的基礎上,從一些簡單的點入手,引入一些經常用到的開發技能點。從單體應用開發,過渡到分布式應用開發,技術棧的變更必然導致學習、工作上產生不小的變化,以下列出幾點,來幫助想要轉型的朋友掌握這些技能,以便更好的融入到新團隊中去。

  • 分布式通訊技術 。單體應用幾乎不涉及到系統間的交互,或者有些通過老舊的WebService的形式進行交互,互聯網分布式系統傾向于采用輕量化的、更高效率的通訊方式,比如基于HTTP、RPC協議等,了解基本的原理才能更好的使用它們,常見的,再掌握所以你應當掌握一些常用的分布式框架,比如常見的Apache Dubbo,Spring Cloud,Google gRPC等等。數據交互的格式以有輕量的JSON替代原先比較臃腫的xml格式。

  • 緩存技術 。緩存可謂是提高應用效率的大殺器,在互聯網產品應用非常廣泛,掌握幾個常見的緩存中間件是很有必要的。也很多應用場景中,也只能緩存才能保證應用的完整性,比如秒殺場景。緩存按應用場景也有區分,如本地緩存EHcache,Guava等,分布式緩存Redis,Memcache,hazelcast等等。

  • 非結構化數據存儲 。互聯網產品更多會產生一些碎片化的數據,且沒有嚴謹的數據結構,這些些場景上采用非結構化存儲勢在必行。根據不同的數據類型,還可以細化分為不同的NOSQL庫,比如說文檔數據庫(MongoDB等)、KV庫(Redis,LevelDB等)、圖庫(Neo4j)、列數據庫(Hbase等)、搜索引擎(Solr、ElasticStack等)。

  • 異步、多線程技術 。同步的一問一答,能比較及時的處理業務,但當業務量大的時候,為提高系統可用性、處理效率,往往會進行異步、多線程方式進行處理。線程池技術,高并發編程顯的尤為重要。

  • 消息中間件 。MQ天然具有系統解耦的優勢,應用場景也比較豐富,如在分布式事務中作為中間辦來協調事務、統一的消息(APP推送,短信等等)推送分發、延遲隊列,特別是在高并發高承載的情況下進行削峰平谷,緩解系統壓力。比較常見的RabbitMQ、ActiveMQ、RocketMQ、ZeroMQ、Kafka等等。

  • 分布式事務 。單體系統的事務很容易控制,當系統擴展為很多個子系統時,事務會分面在各個子系統中,只有保證分布式事務的準確性,才能保證數據的完整性。目前現在很通用的分布式開源解決方案比較少,大家都在采用自己的方案在做,阿里最近開源的Fescar是一個比較有潛力的方案,還有華為的SAGA方案等等。

  • 安全開發 。安全開發在所有系統中都存在,只不過傳統的單體應用開發,特別是外包行業,基本很少考慮。而互聯網產品面向大眾,所以網絡安全、數據安全更為關鍵,比如常見的XSS攻擊、CSRF攻擊、撞庫、拖庫等等,都需要在開發、測試、運維過程中重點關注。 OWASP TOP 10 或 CWE top 25 都有比較詳細的描述,可以關注下。

  • 運維層面 。Linux常見的操作應當掌握,畢竟我們很多的服務器都是運行的x86架構下的Linux服務器中,即便是不同的分發版本,命令很多也是通用的。Devops文化已經不再陌生,開發&運維已經不可分割開來單獨作業務,持續集成(CI)、持續部署(CD)技術將二者的邊界變的更模糊,共生共存。

下面蝗幾點高級進階點,這些點并非必須要掌握,但后續肯定會遇到,技多不壓身,有條件的話,可以適當的探索一二,擴展眼界,提升格局。

  1. 鏈路追蹤技術 。單個系統里的日志可以按系統交互的先后順序輸出,單系統分拆后,系統日志分別存在于各個子系統中,再區分請求的先后順序難度就比較大了,導致追蹤定位問題,比較繁瑣復雜。還好Google又一次引領了潮流,Dapper論文的出現,催生出一大批開源組件的出現,Zipkin、Pinpoint、CAT等應用比較廣泛的幾個。

  2. 集群部署 。聽起來比較搞大上,無非是將原來一臺機器干的事,分散在不同機器執行而已,對外提供較高的可用性、計算能力。對于每個用到的中間件幾乎都會有主從、主備、集群、高可用等部署策略。

  3. 高可用技術 ,與集群技術應該是關聯性很大的,更多是來應對單點故障,簡寫稱為HA(High available),比如可能會經常用到keepalived來保證Nginx、Apache、Tomcat的HA策略;比如會用到Supervisor來保證某些進程掛掉后,自動拉起。

  4. 容器技術 。Docker應用的普及,將云原生應用的提到前所未有高度。Kubernate等容器編排工具更加快了云原生應用(Cloud Native)的普及,CNCF孵化下的各種開源中間件也為業務提供了強大的技術支撐。

由于傳統軟開發過程中較少的涉及到如上一些技術點,所以需要在工作之余進行練習掌握,這對后續的面試求職也有很大的幫助。沒有工作場景,就沒有掌握相應的技術,沒有相應的技術支撐,就沒有機會進入互聯網行業,畢竟很多公司都是希望你來就可以上手產出價值,而不是培訓一兩月時間再上崗。