IP Subnetting

tags: ccna

IP Subnetting

Something you need to know first: Binary Odometer

10.1.1.254 + 1 = 10.1.1.255
10.1.1.255 + 1 = 10.1.2.0
10.1.2.0 + 1 = 10.1.2.1

in reverse:

10.1.2.0 – 1 = 10.1.1.255

Example 1

172.16.35.123/20 or 172.16.35.123 with the mask 255.255.240.0

Binary Method

image alt

Quick Method

Figure out the subnets:

First subnet = 172.16.32.0

Next subnet = 172.16.48.0

Broadcast address = next subnet – 1

172.16.32.0 + 1 = 172.16.32.1`

Last host = Broadcast – 1
172.16.47.255 - 1 = 172.16.47.254

Subnetting

  • Class A subnetting (255.0.0.0) support 1677214 (2^24) host per network, that way too much
  • Class B subnetting (255.255.0.0) support 16382 (2^16) host per network, that way too much
  • Class C subnetting (255.255.255.0) support 254 (2^8) host, more likely we subnet down to at least 254 hosts or even further

If you subnetting a network only has 2 hosts, you can subnet with (255.255.255.254) or CIDR as /31

Network, host number

  • Networks: 2^(network bits)
    • one allocate for the subnet
    • one allocate for the broadcast
  • Hosts: 2^(host bits) – 2

Subnetting to be short

  1. “stealing” or “taking away” bits from the host portion of an address, and
  2. allocating those bits to network portion

Example 2

Origin network 10.128.192.0/18 need at least 30 subnets as many hosts as possible

image

  1. draw the line with /18 to split network and host
  2. 2^5 > 30, need 5 subnet bit, draw the line to split subnet and host
  3. network/subnet portion is 8+8+7=23 bits, host portion is 32-23=9 bits
  • First subnet: 10.128.192.0/23
  • Second subnet: 10.128.194.0/23
  • Last subnet: 10.128.254.0/23

第一次開發選服就烙賽

Intro

自從邱威傑市民服務網站上線後,一直想要完成這篇,紀錄一下這一個月多月開發以來的心得感想,但因為專案完成,本身也剛換工作,無預警進入了懈怠期,不知不覺就拖到現在了

晚上和呱吉跟他的政治團隊吃飯,回家後提醒自己寫下紀錄,今天大概就能算是一個圓滿的結束點吧~

18.12.07 確定接下案子

在這之前,第一次和負責的團隊成員——很年輕的法律系學生 @Eddy 見面,一開始當然不知道呱吉會打算怎麼做這個系統,原本以為會有前輩主導開發,去參與討論或插花即可,但實際上是最多找2-3個人做;也以為是要做能讓多個議員註冊、使用的平台,但需求聽起來卻像呱吉個人的宣傳式網站

我認知到一件事,那就是 Eddy 沒辦法準確評估我的技術水準,只知道我有做過網站。令人訝異的是,當天握手之後就直接把任務交給我了。當然,這是風險評估出了問題呢,還是完全信任夥伴?我選擇相信後者。(團隊的風氣感覺是年輕人放手去做就對了,烙賽沒關係?)

專案需求雖然很簡單:使用者填寫表單、送出後可以在後台編輯。但我還是一樣超沒信心,因為認知到:

  • 我希望這是一個開源專案,如果要開源,會有資安上須考量的風險,加上呱吉是公眾人物,容易成為箭靶
  • 短期會有高流量,分散式部署是必要的;自己沒有實際維運過分散系統,大概知道是怎麼做,但沒把握
  • 重點是前端視覺與使用者體驗,但自己頂多做後端,前端雖然會寫,但根本在標準之下

Read more “第一次開發選服就烙賽”

使用 Cloud Build 搭配 Helm 改善雲端部署

管理 Kubernetes 的服務時常有一些困擾:

  1. 須根據環境 (staging, production…) 去套用不同的設定及環境變數,整合不易
  2. secret 常是手動新增,如 cloudsql-proxy 的憑證,時間久了常忘記該 secret 是幹麻用的,及整個服務重新部署也會卡在這個手動步驟

使用 Helm 可以幫助我們管理這些部署檔案:

  1. 一鍵部署、移除
  2. 可根據不同的環境採用不同變數,有幾種可行的作法
  3. 可根據彈性的判斷式生成設定檔
  4. chart 的版本控制 (Release)

準備事項:

  1. 有個叢集
  2. Client 端安裝 Helm , Server 端安裝 Tiller
    image
  3. 叢集有 RBAC ,可以關閉 RBAC ,或給 Tiller 權限:
    • helm init預設使用的服務帳戶是default
    • 叢集的default服務帳戶綁定cluster-admin叢集角色

Helm 有提供 dependency 的功能,可以透過以下指令來部署全部的 subchart:

但這裡會有一個問題,即部署時沒辦法指定 subchart 要吃哪個 value file ,因若你的 chart 參數是分成values.prod.yamlvalues.staging.yaml,一旦 chart 打包成 package ,package 在使用時只能吃 values.yaml

下個版本可能提供相對應的作法,請參考相關 issue

透過 Cloud Build 部署

透過helm create建立並設定完 chart 後,希望能在 Cloud Build 的流程透過 helm 部署,這邊選用 cloud-builer-community 提供的helm映像檔

  1. Build 該映像檔並推至專案的 Container Registry
  2. 參考 example 來新增流程,如helm installhelm upgrade
  3. 若 RBAC 是啟用的狀態,須要給 Cloud Build 操作叢集的權限
    • Cloud Build 的服務帳戶綁定roles/container.admin角色及cluster-admin叢集角色,請參考相關指令
      image

IP Addressing

tags: ccna

IP Addressing

  • layer 3 logical address assigned by an administrator(MAC built in NIC)
  • used to identify specific devices on a network
  • every device on the internet has a unique IP Address

Street Analogy

  • network address portion
    • identifies a specific network
    • routers route traffic via routing tables, is based on network address(Network ID), not ip address
  • host address portion
    • identifies a specific endpoint on a network
    • we can use a protocal such as ARP to find the host

Ipv4

  • connectionless protocal: no sessions formd when transmitted, no status info
  • packets treated independently
    • may take different paths: load balancing, bandwidth, hopcount
  • hierarchical addressing sturture
  • best effort delivery
  • format
    • 32 bit with 4 octets
    • like DHL or FedEx routing parcel based on an address

Classes

  • Unicast Traffic
    • A
      • start with binary 0
      • range from 0.0.0.0(00000000) to 127.255.255.255(01111111)
      • exceptions:
        • 127 is reserved for loopback: 127.0.0.1
        • 0 network is reserved for default network: 0.1.1.1
      • actual range from 1.0.0.0 to 126.255.255.255
      • portions
        • first 1 octets: Networks
        • last 3 octests: Hosts
    • B
      • start with binary 10
      • range from 128.0.0.0(10000000) to 191.255.255.255(10111111)
      • portions
        • first 2 octets: Networks
        • last 2 octests: Hosts
    • C
      • start with binary 110
      • range from 192.0.0.0(11000000) to 223.255.255.255(11011111)
      • portions
        • first 3 octets: Networks
        • last 1 octests: Hosts
  • Multicast
    • D
      • start with binary 111
  • reserved for other purposes
    • E
      • start with binary 1111

These classes replaced by Classless Inter-Domain Routing(CIDR) in 1993

Read more “IP Addressing”

OSI Model

tags: ccna

OSI Model

  • By International Organization of Standard

Benefits

  • Standard and INTEROPERABILITY
  • Split development/role: hide developer from lower layer
  • Quicker development

Layers

You need to remember both the name and the layer number

  • Layer7: Application
  • Layer6: Presentation
  • Layer5: Session
  • Layer4: Transport
  • Layer3: Network
  • Layer2: DataLink
  • Layer1: Physical

Trick: All People Sleeping Through Networking Don’t Pass

Network Engineer: Focus on 1, 2, 3, 4 Layers
Web Developer: Focus on 5, 6, 7 Layers

Read more “OSI Model”

序列 – Python Sequence

Sequence

必須足以下條件:

  • 物件的集合
  • countable
  • zero based indexing (__getitem__)
  • 為什麼 index 要從0開始?
    • 0 based: 0 <= n < len(s)
    • 1 based: 1 <= n < len(s) + 1 Upper bound 用小於的原因是計算長度時不須再+1
  • 有序(positional ordering)
    • 舉例來說 list 和 set 都是物件的容器,但 list 可以被排序, set 不行,因此 list 是 Sequence Type 而 set 不是

特性:

  • Homogeneous vs Heterogeneous 同質即序列的物件型態必須是相同的
  • Iterable vs non iterable 可以迭代的容器不一定是序列,如set
  • Mutable vs Immutable Mutable sequence can be modified. 要注意的是在操作新序列的時候更動到原本的序列(in-place),如 reverse()

以 list 為例,這幾個操作皆為原地算法(inplace):

  • l.clear()
  • l.append()
  • l.pop()
  • l.extend()
  • l.insert()
  • l +=
  • l *=
  • l[somesliceobj] = 若是 concat(+)、repetition(*)、slicing 都是關聯至新的物件參考

要注意的是,容器序列(儲存物件參考)的 concat 和 repetition 有可能只是儲存多個相同物件的參考

Read more “序列 – Python Sequence”

Docker Swarm進階實戰(2)

tags: docker, devops

Docker Swarm進階實戰(2)

Service Logs

  • 是container logs的聚集
  • 可以印出全部tasks或單一task
  • 如果你沒有log system,這可能是唯一troubleshooting的方式
  • 沒有storage,、不支援log搜尋或轉送至其他系統
  • 如果你有設定--log-driver,也就是其他logging方式,此指令就抓不到任何logs

除非你是小型swarm或測試階段,才使用一般的service logs,長期還是需要其他log storage的解決方案

範例指令

印出時不被截斷

只取最近50筆

Linux跟Mac可以透過grep做簡單的篩選

Windows透過findstr

Docker Events

  • Docker engine或Swarm產生的操作(Action)紀錄
  • 紀錄service/node/secret/config/network等的新增修改刪除動作
  • 支援搜尋及formatting
  • 分兩種scope,分別是swarm level跟local level(單一node)
  • event存在實體記憶體,最多只能存1000筆,所以當node數量很多時,event就不堪用了,還是需要額外的logging system

範例指令 顯示local events,如果node是manager,會顯示swarm events

--since

--filter

Swarm Configs

可以在Swarm的Raft Database儲存字串或檔案,並mapping容器中,適合的應用場景為:

  • nginx設定或更改proxy config
  • 設定或更改資料庫config等 這樣可以取代bind mount(將資料儲存在硬碟),存在Raft能提高可用性 swarm config跟secret有異曲同工之妙,可以透過指令來新增刪除config files,要注意的是:
  • config是immutable,不能修改只能replace
  • 若有任何service使用到該config,要先移除service才能移除config
  • 如果是隱私資料一樣用secret來存

範例指令

用特定config來建立一個service

新增新的config來取代舊的,並更新有用到該config的service

stack file,3.3之後才支援config

Docker Swarm進階實戰(1)

tags: docker, devops

Docker Swarm進階實戰(1)

容器的更新

在不移除及重啟容器的情況下更新,從以下指令選項可以知道,container update旨在控制和限縮該容器的資源

另外要清楚的是我們透過docker run執行一個容器,其狀態就只有RunningShotdown兩種,如果出了差錯,此容器不會也不該有任何操作可以重新建立自己

Service的更新

  1. 再來看service update的選項,很明顯比容器更還多出許多操作,因為swarm service存在的目的就是要能在不影響服務的情況下取代(replace)、重建recreate容器

  2. swarm mode也是利用這種方式,逐一取代service底下執行的容器,達到滾動更新

  3. docker service的指令並非直接告訴系統去新增或刪除容器,而是新增了一連串的工作到佇列中,整個處理的流程帶有scale、rollback、failure mitigation等功能

  4. service更新的目標是limit downtime,也就是控制停機時間

  5. stack deploy會觸發service更新

  6. service更新會對nodes做rebalancing

Read more “Docker Swarm進階實戰(1)”

Python WSGI及其應用

tags: python, wsgi, gunicorn, uwsgi

Python WSGI及其應用

WSGI是什麼?

  • 全名Python Web Server Gateway Interface
  • 基於CGI
  • Python用來描述了伺服器和請求處理程式之間傳輸資料的一種標準(協議)

PEP3333

基本原理跟目標

server、app、framework共用的界面

…proposes a simple and universal interface between web servers and web applications or frameworks: the Python Web Server Gateway Interface (WSGI).

不再重造輪子

…the goal of WSGI is to facilitate easy interconnection of existing servers and applications or frameworks, not to create a new web framework

只會支援python既有的release

…precludes WSGI from requiring anything that is not already available in deployed versions of Python

未來會增加部署的標準

…current version of WSGI does not prescribe any particular mechanism for “deploying” an application for use with a web server or server gateway. At the present time, this is necessarily implementation-defined by the server or gateway

Read more “Python WSGI及其應用”

面試紀錄 Interview logs

tags: job

Interview logs

TOC

Tagtoo科技跨平台網路廣告

  • job: 後端工程師
  • interviewer: Teddy
  • location: 臺北市信義路四段267號11F
  • date: 2018.12.20
  • questions:
    1. 有沒有用Django開發過什麼專案?
    2. 有用過GCP的什麼服務?有用過GKE嗎?
    3. 看你的經歷,為什麼又想回業界?
    4. 有沒有AI的經驗?用過什麼工具(視覺化、統計分析)?
    5. 為什麼會想投我們公司?是哪個部份吸引你?
  • answers:
    1. 以我在目前任職的農科院有開發過的兩個專案來回答
    2. 主要是使用compute engine,有舉出使用情境:為了幫公司測試tableau server的功能,分別在GCP部署了tableau server及api server;另外有補充是以docker來做部署;至於GKE的部份還沒有摸過
    3. 這個問題我說明了在業界的公司為什麼離職,之後又為什麼會找公部門的工作,有點可惜沒回答到重點,其實主要是業界的技術水準跟real world的營運,能學到更多的東西,另外一方面則是薪水
    4. 回答之前線上課程有上過相關課程,用numpy、pandas、seaborn來打kaggle的經驗
    5. 這一題回答得不好,我回答因為公司所使用的技術滿吸引我,但沒有表現出對廣告投放或資料分析這方面的興趣
  • informations:
    • 目前Tagtoo的廣告拓及率已是領導的地位、規模也在擴張(東南亞:馬來西亞、印尼等),之前比較沒有用AI技術來分析資料(2-3億筆cookie),現在逐漸在加強這方面的分析應用
    • 不接受遠端工作,老闆覺得見面的直接溝通最有效率
    • 應徵的信件應該都是老闆自己回覆的
  • references:
  • results:
    offer get (N-10)*13

趨勢科技TrendMicro

  • job: [email protected] Segment
  • interviewer: Catherine、John
  • location: 台北市大安區敦化南路二段198號8F
  • date: 2018.12.21
  • questions:
    • 一面
      1. 介紹你最近全端開發的專案?
      2. 你說的這個專案是部署在哪裡?為什麼不部署在雲端?
      3. 你的專案有寫過任何測試嗎?是什麼樣的測試?
      4. 為什麼你會針對穩定性來做測試?
      5. 你的專案主要用到什麼工具?
      6. 你之前在業界任職時的專案開發流程為何?
      7. 你的優點跟缺點為何?
      8. 請排序你最想當的角色:code、maintain、testing、design
    • 二面
      1. 為什麼考卷最後一題是送分題你卻沒寫到?是時間太短嗎?
      2. 如果今天桌上有5顆外觀一模一樣的球,但重量不同,給你1個磅秤,你能在幾次比較過後依重量完成排序?
      3. 同上題,如果今天已知其中3顆球和其中2顆球重量相同,能減少你比較的次數嗎?
      4. 如果9跟3的交集是1,聯集是多少?
      5. 今天讓你測試一個登入頁面,有email、password跟1個登入按鈕,你會怎麼測試?
      6. 為什麼前兩個工作性質差異這麼大?
      7. 你有什麼壞習慣?
      8. 人生遇過最大的困難是什麼?
      9. 你守時嗎?
      10. 你未來短、中、長期計畫是什麼?
  • answers:
    • 一面
      1. 介紹了我用Django開發的視覺化網站,專案的緣由以及要解決什麼問題
      2. 部屬在Local Windows Server上,說明因為專案性質跟資源因此沒有部署在雲端,有說明其中利弊
      3. 這個專案從多個API抓取資料,有測試抓取資料的函式及紀錄log,另外針對執行時段較長(如時間範圍廣的)有另外測試
      4. 這個問題一時想不出來怎麼回答,就回答了因為遇到某個問題必須加上這樣的測試
      5. 抓取資料的排程用了redis、celery,後端是django,前端主要用到highchart.js及datatable.js
      6. 一個junior做開發,自訂合理的開發時程或senior同意後開始開發,其中有遇到問題適時反應給senior知道,pm對整個專案的成果負責
      7. 說明了太過悲觀主義,有時想太多劃地自限,但這同時是個優點也是個缺點
      8. code > mantain > testing > design
    • 二面
      1. 答題時間沒有規劃好,不應該發生這樣的事
      2. 磅秤是一種比較排序法,最佳時間複雜度會是O(NlogN)
      3. 答不出來,但可能可以減少?
      4. 原本超簡單的題目一時竟然回答不出來,腦袋卡在為什麼9跟3交集會是1,其中是經過什麼運算得到?主管回覆說可以,但不用想這麼複雜有直接答案
      5. 測試form沒填正確回覆的錯誤訊息是否正確,改變cookie來測試session,之後主管補充可以抓背後的API測試
      6. 這題回答得太長,但主要是遇到突發狀況跟想轉語言
      7. 有強迫症動作、駝背、沒運動習慣
      8. 家裡發生的突發狀況跟當時自己心境上的困境
      9. 自己是個守時的人
      10. 短期:點擊後端技能樹、加強技術能力;中期:在開源社群有所貢獻;長期:創業、做自己有興趣的project
  • informations:
    • 其實我是要面web後端RD,QA只是後來主管有興趣,前幾天臨時加的面試,結果RD當天已經沒有缺
    • 趨勢是看到cakeresume上的履歷,發email線上考邀請,以python做,約一個禮拜後約面試
    • 面試時對趨勢QA工作概況的認知:
      • by project
      • 從專案開始到最後產品上線後的使用者體驗部份全程參與
      • 有分成client端、backend等,行為模式會不同
      • 依照專案需求會碰觸到deploy
      • 該部門RD跟QA的人數比是1:1
    • 針對該部門做的專案細節介紹就不公開紀錄
    • 環境部份:
      • 沒停車位,很難找車位
      • 電梯常常大排長龍
      • 人資很可愛…
    • 說明自己開發用過得技術時比較沒有被challange到
    • 考題很廣,以下列一些比較有印象的:
      • OS: linux指令如chmod
      • code: 給一段code考輸出
      • Web: subnet、ajax
      • 邏輯: 小明大昨天7歲,明年10歲,請問小明生日
      • testing: 針對鬧鐘app列出可做的測試、兩個client端上傳檔案到cloud要注意什麼問題
    • 遇到的人資、面試官人都還滿好的,一整天面試下來滿舒服的
  • references:
    • everyting on google: 趨勢 qa 面試 ptt