node.js web 開發環境紀錄

webframework : express
npm install express

view engine : ejs
npm install ejs

dev-tool : nodemon  監控檔案變化自動重啟伺服器
npm install nodemon -g

css framework : bootstrap

db : node-sqlite3 :memory:
npm install sqlite3

yaml : js-yaml
npm install js-yaml

db-tool : adminer

flow control : async , step 一開始用 step ,後來看到 async 發現 api 設計的好一點~語意比較清楚

從挑選 package 的過程中真的可以觀察到好的 api 設計。

Open vSwitch 架構概觀

看了 open vswitch 也有一陣子了,斷斷續續也在自己的 wiki 上亂寫了一些東西,但是一直覺得自己不夠熟,也不知道從哪裡開始整理,先在這寫一些概念性的解釋…

官方資料內有一個關於 porting 的文件,裡面畫了實作上的一些抽象元件,幫助你決定要移植 ovs 時,要改寫哪個部份,如下圖。一開始看這張圖應該會有點霧煞煞,對 ovs 的很多概念還不熟悉,不知道從哪裡開始瞭解,看完文件的解釋還是不太懂。

                            |   +-------------------+
                            |   |    ovs-vswitchd   |<-->ovsdb-server
                            |   +-------------------+
                            |   |      ofproto      |<-->OpenFlow controllers
                            |   +--------+-+--------+  _
                            |   | netdev | |ofproto-|   |
                  userspace |   +--------+ |  dpif  |   |
                            |   | netdev | +--------+   |
                            |   |provider| |  dpif  |   |
                            |   +---||---+ +--------+   |
                            |       ||     |  dpif  |   | implementation of
                            |       ||     |provider|   | ofproto provider
                            |_      ||     +---||---+   |
                                    ||         ||       |
                             _  +---||-----+---||---+   |
                            |   |          |datapath|   |
                     kernel |   |          +--------+  _|
                            |   |                   |
                            |_  +--------||---------+
                                         ||
                                      physical
                                        NIC

我自己則是從他安裝完所提供的各種工具與重要背景服務的角度開始,由此開始熟悉 ovs 的概念,感覺這是一個比較好的入門點。我畫了一張類似的圖。

            +---------+  +----------+  +---------+   +---------+
            |ovs-ofctl|  |ovs-appctl|  |ovs-vsctl|   |ovs-dpctl|
            +---------+  +----------+  +---------+   +---------+
                   ^       ^ USER SPACE TOOLS ^           ^
           +-------|-------|------------------|-- --------|----+
                   v       v                  v           |
                +--------------+       +----------------+ |
                |              |       |                | |
                | ovs-vswitchd | <---> |  ovsdb-server  | |
                |              |       |                | |
                +--------------+       +----------------+ |
                      ^     USER SPACE DAEMONS            |
           +----------|-----------------------------------|----+
                      v        KERNEL SPACE               v
                +------------------------------------------+
                |                                          |
                |                  datapath                |
                |                                          |
                +------------------------------------------+

datapath – openvswitch_mod.so 當 ovs 以 kernel 模組運作時在核心中的單元,主要處理在核心交換封包到各介面的工作。datapath 應該也能當作 vswitch 在 kernel 中的 instance,可以有好幾個 datapath 。

USER SPACE DAEMONS – 開啟 ovs 需要啟動的兩個背景程式

  • ovsdb-server:用來儲存所有 ovs 設定資料的簡易資料庫,設定完會看情況通知 datapath(kernel)同步狀態,統計資料也會存在這 。所有能設定的欄位跟解釋都在這份文件內。
  • ovs-vswitchd:用來跟 openflow 控制器溝通與 ovsdb 溝通。可以讓你設定你的 vswitch 要跑在什麼模式。

USER SPACE TOOLS:

  • ovs-vsctl : 對 ovsdb 操作,操作指令比較具有語意,會幫你轉化成 ovsdb 看的懂的語法,例如建立 bridge、指定 bridge port 的對應、設定 Bridge Port Interface etc
  • ovs-dpctl : 管理 datapath 的工具,大部分資訊都是透過 netlink 反應出 datapath 目前的狀態,也可以直接操作 datapath 中目前的 flow。
  • ovs-ofctl : openflow switch 管理工具,可以操作與 openflow 相關的設定,是設定 ovs-vswitchd 的不是 datapath 的。在這裡設定一些靜態的 flow 之後會被轉化更實體的 flow 同步到 datapath 中。例如預設的 flow 是 rule=*,action=normal,就是把 ovs-vswitchd 當成一個 learning switch。設了 controller 以後就是讓 flow 再間接去問控制器,再從控制器產生 flow 存放到 ovs-vswitchd 內,ovs-dpctl 跟 ovs-ofctl 都可以用 dump-flows 印 flows 出來看 。
  • ovs-appctl : ovs-vswithd 的管理工具,可以跟 ovs-vswitchd 程序溝通,所以要指定的是 ovs-vswitchd 的 pid。例如可以用來印出 forwarding table。

找到畫這圖的有趣的軟體:http://www.asciiflow.com/

放假在家獨自在網路上不停亂看,PTT、FB,文章都亂看過後,有種迷失方向感,令人略顯落寞。FB 對我這樣不善交際的人來說是一種矛盾的功能,把 FB 當成 BBS 來用,卻盡量不與人產生互動。看到人生日內心就會產生混亂,為什麼把祝賀生日變成如此的容易與制式,是否因此就要產生固定的迴圈,你來祝賀我我就去祝賀你,這樣還是真心的嗎。因此我決定逃離這個模式,隱藏自己,試圖不要主動與人產生互動,矛盾的使用這個社群網站…。矛盾的在網路生活著。

已經快要受不了這種制式又沒有突破的作息與生活,希望能再畢業後用別種方式來半強迫的與外界產生互動。所以在畢業之前的假日只好多準備幾部電影了,溫馨喜劇電影在此時此刻變得格外重要,這些演員突然變成自己最重要的人。謝謝你企鵝先生,金凱瑞…

一直希望自己觀影的層次能夠在不斷累積之下有所提昇,能看到影片更深層的東西,讓自己對藝術、設計、抽象的概念更有瞭解。今天在網路上看了一部微電影,看到影片用如此平面的方式表達,一次說一句話,不刻意讓邏輯合理,看起來就很奇怪,用很華麗的句子去堆疊一些與影片情感沒有直接相關的情緒,這些感受是如此明顯。這讓我重新省思看過一些較著名的電影,似乎影片中情節的每件事的邏輯與情感都有深入的考量,並搭配良好的攝影與後製技術,讓人感到佩服…

今天的片單是~Winter Bone,飢餓遊戲女主角在前幾年演的片子。

希望在這兩天過後能在自己紛亂的小宇宙之中得到救贖。恢復作息~

又過了一天,今天禮拜一,我晚上九點睡,兩點半就醒了,不知道算是恢復作息嗎?

把一天的時間延長到有十八個小時,而有一半的時間是要獨自面對自己,突然對生活感到害怕,因為我不曉得如何安排自己的時間。

好像有大把的時間可以用,應該要做了更有意義的事,讀英文、看書,但是一打開電腦,就開始陷入空虛的網路衝浪感到空乏又無法自拔。這或許是我不敢長時間獨自面對自己的一種逃避方式吧