如何從傳統軟件開發順利過渡到互聯網技術開發-硬技能


如何從傳統軟件開發順利過渡到互聯網技術開發-硬技能


題圖: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孵化下的各種開源中間件也為業務提供了強大的技術支撐。

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


如何從傳統軟件開發順利過渡到互聯網技術開發-硬技能


往期推薦:

  • 2018,我為什麼離開舒適區?
  • 資深傳統型開發者的思考:傳統軟件企業危機四伏
  • 基於SpringBoot的Web API快速開發基礎框架
  • 基於SpringBoot-Dubbo的微服務快速開發框架
  • 如何從傳統軟件開發順利過渡到互聯網技術開發
  • 那些會阻礙程序員成長的細節[7]
  • 30多歲挨踢人要轉行的焦慮,是真的嗎
  • 如何快速的積累經驗
  • 學習新技術時你應當掌握的『最少必要知識』
  • 2018,我為什麼離開舒適區?
  • 代碼、功能、系統、產品、生態
  • 從技術到管理——角色轉變

相關推薦

推薦中...