IT名詞歸納與簡單瞭解

雲計算概念

雲架構

  • 我看過兩本雲計算,《雲計算》《雲計算架構技術與實踐》
    1. 雲計算是一個很廣的概念,簡單的說將互聯網中的計算機資源按需分配,提升閒置資源的利用率,須要多少你就購買多少,之前是買軟件和硬件,如今是買服務
    2. 從咱們公司的角度,購買雲服務能夠減小運維成本,獲得可伸縮性的彈性服務,你能夠認爲雲的計算/存儲能力是無限的
    3. 如今主流的雲服務有IAAS(基礎設施服務),PAAS(平臺服務),SAAS(軟件服務)
  • 雲架構包括了不少技術領域,虛擬化技術,分佈式計算,分佈式存儲,網絡技術,容器技術
  • 虛擬化是基礎設施層的核心技術
    1. 虛擬化就是將硬件設施拆分抽象,而後進行統一管理,虛擬化包括CPU虛擬化,存儲虛擬化,網絡虛擬化,操做系統虛擬化
    2. 目前主流的虛擬化技術有Xen,能夠實現不一樣級別的虛擬化, KVM能夠實現基於Linux內核的虛擬化
    3. 開源框架OpenStock能夠對這些不一樣虛擬化實現進行整合,組成一個分佈式系統
  • OpenStock是一款來源雲操做系統框架
    1. 他提供了不少與架構功能,包括計算服務,存儲服務 ,鏡像服務,網絡服務,容器服務
    2. OpenStock還整合了不少容器,好比Docker,還有大數據系統Hadoop
    3. 基於OpenStock和虛擬化能夠提供雲架構的基礎設施服務
  • 如今更熱的是PAAS,不少大公司包括亞馬遜,谷哥,微軟的Azuro都提供雲平臺服務
    1. 平臺服務就是給客戶提供系統的開發運行環境,就是容器
    2. 他比IAAS更低成本,由於他是按流量收費或者資源使用量的,而不是按虛擬機個數,並且他更穩定,由於相比本身實現,容器幫你屏蔽了宕機等風險,PAAS還有一個優勢是它能夠實現智能化的資源分配,使你的系統在高峯和低峯獲取相應的資源。
  • 要實現PAAS,Docker實如今很火的容器技術
    1. 基於Docker的雲平臺服務有一個很大的優點,它屏蔽了你的開發語言,你提交到PAAS的再也不是代碼,而是Docker鏡像。不像之前PAAS,只支持少數語言,並且遷移到雲端的時候還得該大量代碼。
  • 對於現代企業來講桌面雲是一種很好的選擇,它有幾大優勢,下降成本,統一管理,移動化辦公等。

雲應用

  • 瞭解雲服務的架構,可使咱們更好的使用雲服務,對於咱們開發團隊來講,如何更好的利用雲平臺來實現咱們的應用是咱們須要關注的事情
  • 這裏有一個概念,就是原生雲,並非你把項目遷移到雲,你有是一個雲應用,由於你沒有享受到雲服務的大部分好處
  • 原生雲是可擴展性的,分佈式的,雲的真正優點所在,只能經過使用原生雲服務實現。
    1. 系統與平臺鬆耦合 :好比你用微軟的Azure,而後用力他們的DocumentDB,你的應用就被綁定在Azure上了
    2. 單一職責的服務器:從而實現藍綠部署原則
    3. 子系統鬆耦合: 每個子系統均可以按照本身的需求來獲取相應的資源
    4. 系統和WEB容器鬆耦合: 可讓Web容器利用雲平臺的負載均衡器或者隊列機制,獨立的擴展Web容器而和應用系統無關
    5. 將本地存儲看作是臨時存儲: 在傳統方法中,應用將配置、日誌文件、圖像等存儲在本地存儲中。然而,須要改變這種作法,任何持久信息都應轉移到一個持久的服務上,實現數據塊或對象的存儲。
    6. 構建彈性雲: 最好是在架構和設計時,就考慮到對應用故障的處理,而不是去考慮併力圖實現穩健性。穩健性是永遠也不可能實現的。消除單點故障(SPOF,Single Point Of Failure),逐層構建彈性。這樣,即便底層硬件發生故障,應用也可正常運行。 AWS Availability Zones(AZ)和Regions簡化了冗餘能力的設計,相似的服務還有Azure Locally Redundant Storage(LRS)、Zone-redundant Storage(ZRS)、Geo-redundant Storage(GRS)和Read-access geo-redundant storage(RA-GRS)
    7. 邊緣站點(Edge Location)的緩存 : AWS邊緣站點(Edge Location)或Azure PoP(Point of Presence)將緩存提高到了一個新的級別,並下降了延遲。儘量地使用支持經由邊緣站點進行內容傳送的雲原生服務(例如,AWS Cloudfront或Azure CDN)。
    8. 在每一層上應用安全
  • 我是搞Java的我目前正在看的是Spring Cloud,他重要用於實現微服務架構
  • 咱們還要考慮哪些應用適合運化,哪些不適合
    1. 遊戲類,圖形渲染類,大流量實時要求高不適合
    2. 高性能計算,大數據存儲,多方合做的應用適合
  • 各大雲服務提供商

物聯網概念

  • 物聯網就是萬物互聯,具體的將就是將須要聯網的設備終端,用戶接口,和信息處理系統聯通
  • 其中設備終端要有一個可編程的平臺:這個平臺包括芯片組,CPU,傳感器,通訊模塊等
  • 物聯網能夠分爲三個主要模塊:傳感器,網絡通訊,還有管理系統
  • 傳感器有射頻識別(RFID),GPS,紅外,圖像感知,光,溫度,距離,心率等等
  • 物聯網開發分爲終端設備編程,就是嵌入式編程,還有就是軟件開發,物聯網終端設備要懂的是傳感器,IP6,無線通信等

網絡編程概念

網絡基礎

  • 保留ip
    1. 10開頭, A類個數最多
    2. 127.16-127.31, B類,docker內部網絡佔用
    3. 192.168, C類,個數最少,局域網最經常使用

基礎

  • TCP/IP
    1. TCP是一種基於鏈接的協議。在使用流通訊以前,咱們必須在通訊的一對兒socket之間創建鏈接。其中一個socket做爲服務器進行監聽鏈接請求。另外一個則做爲客戶端進行鏈接請求。一旦兩個socket創建好了鏈接,他們能夠單向或雙向進行數據傳輸。
  • UDP
    1. UDP是一種無鏈接的協議,這就意味着咱們每次發送數據報時,須要同時發送本機的socket描述符和接收端的socket描述符。
  • HTTP
    1. 單工通道應用層協議
    2. 基於TCP/IP
  • Socket
    1. 對TCP或者UDP接口的封裝的接口,使得通信協議更加便於使用
  • WebSocket
    1. 雙工通道應用層協議
    2. WebSocket是html5的一部分
    3. Java能夠用Spring WebScoket和Tomcat WebSocket

Java Only

  • Servlet
    1. Java對於網絡編程的規範接口,因此服務器端必須是Java程序
    2. 具備Java平臺無關特性
    3. 具備網絡協議無關性
  • HTTPServlet
    1. 支持HTTP協議的Servlet,好像沒有其餘Servlet支持其餘協議
  • Servlet容器:Tomcat,Weblogic/Jetty
    1. 對HttpServlet抽象類的不一樣實現
    2. 運行在JVM中
    3. 接收到瀏覽器發送的Http請求後,將其封裝成HttpServlet,因爲發送方式js,接收方式java,因此容器必須理解兩種語言的不一樣規範,進行相互轉換
    4. 看源碼
  • Struts2的Action
    1. 對Http協議的另外一種規範接口
    2. 經過攔截action規範的http請求後,將其封裝成java bean
    3. 看源碼
  • Spring MVC
    1. 看源碼
  • HttpClient
    1. Java用於發送Http請求,好比servlet請求或者action請求

編程語言無關

  • WebService
    1. 對於網絡編程的規範
    2. 具備平臺無關性
    3. 支持HTTP,FTP,SMTP等協議
    4. 最重要的是具備編程語言無關性
  • SOAP
    1. 簡單對象訪問協議的WebService
    2. 支持HTTP,FTP,SMTP等協議
    3. Java框架有Xfire、Axis二、CXF、Axis1
    4. 使用Web Service的過程:得到該服務的WSDL描述,根據WSDL構造一條格式化的SOAP請求發送,而後接收一條一樣SOAP格式的響應,最後根據先前的WSDL解碼數據
  • REST
    1. 表象化狀態轉變風格架構的WebService
    2. REST爲每個資源指定一個惟一的URI,而用HTTP的4種方法GET、POST、PUT、DELETE直觀地表示獲取、建立、更新和刪除
    3. 服務器無狀態帶來了簡單的好處以外,還帶來了安全驗證的問題,這種複雜化會使RESTfull走向SOAP
    4. RESTEasy、Wink、CXF、Axis2

DevOps

資料

總結

  • 代碼管理(SCM):GitHub、GitLab、BitBucket、SubVersionhtml

  • 構建工具:Ant、Gradle、mavenhtml5

  • 自動部署:Capistrano、CodeDeployjava

  • 持續集成(CI):Bamboo、Hudson、Jenkinspython

  • 配置管理:Ansible、Chef、Puppet、SaltStack、ScriptRock GuardRailios

  • 容器:Docker、LXC、第三方廠商如AWSredis

  • 編排:Kubernetes、Core、Apache Mesos、DC/OSdocker

  • 服務註冊與發現:Zookeeper、etcd、Consulshell

  • 腳本語言:python、ruby、shell數據庫

  • 日誌管理:ELK、Logentries編程

  • 系統監控:Datadog、Graphite、Icinga、Nagios

  • 性能監控:AppDynamics、New Relic、Splunk

  • 壓力測試:JMeter、Blaze Meter、loader.io

  • 預警:PagerDuty、pingdom、廠商自帶如AWS SNS

  • HTTP加速器:Varnish

  • 消息總線:ActiveMQ、SQS

  • 應用服務器:Tomcat、JBoss

  • Web服務器:Apache、Nginx、IIS

  • 數據庫:MySQL、Oracle、PostgreSQL等關係型數據庫;cassandra、mongoDB、redis等NoSQL數據庫

  • 項目管理(PM):Jira、Asana、Taiga、Trello、Basecamp、Pivotal Tracker

函數式編程

什麼是函數式編程

  • 函數指數學中到函數,而不是編程中到方法
  • 一個函數到返回值只取決與參數到值
  • 純函數式中到變量不是命令式編程語言中的存儲狀態的單元,而是代數中的變量,即一個值的名稱。變量的值是不可變的
  • 純函數式編程中到流程控制語句也不是命令式編程語言中的控制語句,而是函數的語法糖,是有返回值的
  • 嚴格意義上的函數式編程意味着不使用可變的變量,賦值,循環和其餘命令式控制結構進行編程

函數式編程到特性和好處

  • 代碼簡潔,容易理解
  • 不可變性 - 沒有反作用,更適合多線程
  • 高階函數 - 使得複用到粒度下降到函數
  • 惰性求值 - 減少開銷,提升性能
  • 柯里化?閉包?
相關文章
相關標籤/搜索