# PyCon TW 2017 Collaborative Talk Notes <br> Day 1 - R1
> ### Quick Links
> - [Portal for Collobration Notes 共筆統整入口](http://beta.hackfoldr.org/pycontw2017/) (hosted by [betw.hackfoldr](http://beta.hackfoldr.org/) and [HackMD](https://hackmd.io/))
> - [Program Schedule 演講列表](https://tw.pycon.org/2017/events/talks/)
> - [PyCon TW 2017 Official Site 官網](https://tw.pycon.org/2017/)
>
> ### How to update this note?
> - Everyone can *freely* update this note. 任何人都能自由地更新內容。
> - Please respect all the participants and follow our [code of conduct](https://tw.pycon.org/2017/about/code-of-conduct/) during discussion. 討論、記錄時,請遵守大會的[行為準則](https://tw.pycon.org/2017/about/code-of-conduct/)
>
-------
### 10:40-11:10 <br> Talk: [PyOT - The Merge Between Python and the Internet of Things Concept](https://tw.pycon.org/2017/events/talk/337602843466793058/)
- Slider:
- Speaker: Renaldi Gondosubroto
-------
### 11:45-12:30 <br> Talk: [after VOEZ launch - how to resolve problems of mobile game server development and service maintenance](https://tw.pycon.org/2017/en-us/events/talk/319314010958725199/)
- Slider: https://hackmd.io/p/SkuoAv2lZ#/
- Speaker: 郭學聰
- 共筆:
#### 作者所用的語言
* Python
* Ruby
* Golang
* C#
#### VOEZ Current Status
- Profile, save data, achievement, leaderboard
- Based on GCP
- 曾經想過用AWS
- [Teaser](https://www.youtube.com/watch?v=Bh6gQyJHbxI)
#### HTTP protocol
Request
![](https://i.imgur.com/SDJjHLD.png)
Response
![](https://i.imgur.com/65Kr0uz.png)
#### Genuine & Purchase verification
##### leaderboard -> fake score
* verify request: send request & attach signature
![](https://i.imgur.com/CQpYwXR.png)
* RSA
##### game play -> pirated app & server
* server授權:RSA request hash 增加 nonce (random number)
#### Stability
* transaction
##### publish order and request order (Racer condition)
* request order
* client read game info A, then B, then C
* publish order
* publish game info C, then B, then A
* remove game info A, then B, then C
##### database cache mechanism
* database in HDD and SSD: slow
* Redis and mem in memory: fast, as cache
##### reliable inter-server request
* 由於server之間的溝通導致玩家扣錢失敗
* A: Game server B: 金流伺服器
* 扣款失敗:rollback
* 嘗試三次,失敗後要求client重新連線
* 可以讓玩家排隊沒關係!資料庫不能掛!
#### Performance
* Python is so SLOW
* "skip Python code execution if you can" - HT Kuo 06, 09, 2017
* 支援百萬人上線需要的反應時間: nanosec
* 用Google BigQuery取得公開資料,並把結果存成靜態檔案放流,迴避Python執行
* 使用CDN
* 全球的玩家連線到各地的CDN
* 節省流量及運算資源
* asset files
* 每次都用不同URL
* 可以準確在換日的時候讓 cache expired
* service downtime: 503
* service update: 舊的版本丟410
#### Timezone
* 為了準確地在本地換日時間(ex:3 a.m.)更新活動
* TZ = "Asia/Taipei"
* 用UTC去計算會碰到日光節約時間的問題
>Q: Why not use AWS?
AWS跟中華電信間連線超慢
>Q: 應對百萬使用者的方式?
設定動態開設資源
>Q: Header content type為空?
手動刪除的XD
>Q: 阿里雲和GCP共通方式?
可以做data sync但中國比較偏向自己有伺服器但是Code共通
>Q:歌曲放上CDN是否會被竊取?
歌曲資料有經過加密
-------
### 14:55-15:40 <br> Talk: [Building Microservices in Python 個案分享](https://tw.pycon.org/2017/events/talk/348376501365768328/)
- Slider: https://www.slideshare.net/jonascheng3/building-microservices-in-python-pycon2017
- Speaker: Jonas Cheng
自我介紹:從趨勢獨立成立的子公司 soocii
平台提供給手遊玩家的價值
- 直播群聊
- 社群分享
- 即時資訊(攻略)
費時<1年
backend工程師*5
推薦大師:Martin Fowler、Sam Newmer
## 使用 microservice 的好處:
- 解決傳統monolithic架構的問題
傳統架構:
(負載平衡)+(各種認證,註冊,通知等服務...)+(DB)
改完後=>user用的版本跟後端不相容=>破壞UX
- 革新的設計
- 富有彈性(能夠應對PM的變更需求)
- Small Codebase
- 相對容易測試與維護
- Easy to Scale
- plugin可以隨時抽出或加入,容易擴充
- Easy to Deploy
- 部分佈署
- System Resilience
- 部分元件異常還是可以正常運作
#### 曾經面對的挑戰
系統配置
混合雲:AWS + GCP (因為AWS在tokyo,速度不夠快)
使用技術:Python + C
micro service 問題:開發環境的準備
- 外部相依性 & 內部相依性
- 全部在本地
- 只有microservice跟business logic在本地
- 只有microservice在本地
- 都在雲端開發
- soocii 採用混合方案
- 本地環境:docker-compose, mock data, 假認證
- 整合環境:docker-compose
參考:Development environments for microservices (https://www.datawire.io/guide/deployment/development-environments-microservices/)
- 跨服務的溝通
- 程式溝通方式
- RESTful
- 希望達到零溝通,但基本上沒看過
- micro service 要能時刻提供服務,不會影響主要功能
- 理想上:不應該存在部分元件異常導致全部損毀(如:Redis 異常,應該要可以再存取 RDB)
- 實際上:很難,像是 Auth 是全部共用模組,難以取代,不過另外一個想法是也不容易壞掉
- 自動化測試(CI)
- 理想:修補後可以馬上上線
- 測試種類:(測越多信心越高)
- unit test: functions logics(最快)
- service test: classes + mock class
- requests.mock, mock.patch
- UI test: 整合性測試(最慢)
- consumer-driven contract (CDC)
- 非同步測試:
- celery: task_always_eager
- event-driven (good to have)
- sleep (bad)
- 自動化部署(CD)
- 盡可能延後
- 多版本API同時並存(透過blueprint找到對應版本)
-
#### 導入 microservice 的關鍵
- 所有成員要有DevOps mindset
- 至少要有CI(自動)/CD(到處都可部署)的雛形
- 每個service有獨立的CI
- 監控機制
Q. Instance實際溝通的行為,開發中如何處理?
AWS: (application load balancer)
每個docker註冊在ALB後面 => 確保服務活著,但不清楚是跟哪個docker溝通
Q. 跨伺服器溝通如果逼不得已要交換資料,怎麼處理?
只可能盡量避免。
Q. 為什麼要做混合雲?發生什麼事情?
直播的frame rate掉太多,內部做profiling本地端最快,最後才採用本地端。
-------
### 16:10-16:55 <br> Talk: [Understanding Serverless Architecture](https://tw.pycon.org/2017/events/talk/332303505006002268/)
- Slide: https://speakerdeck.com/dawny33/understanding-serverless-architectures
- Speaker: Jalem Raj Rohit
- what is serverless?
function as a service, no servers
AWS: Lambda > functions > ...
- function container
- function executed in container
- We are not running or maintaining servers
- advantages
- less time maintaining server
- lots of server cost saved
- e.g. deep learning
- dis(ad-)vantages
- allow to run in limit time (AWS: timout setting)
- no control over containers
- monitoring is very very very difficult
- especially, scale out as distributed
- lessons learned and pitfalls
- limit running time problem
- Ansiable to rescue
- help provisioning workers
- running Ansible in `nohup` mode
- no control over container problem
- for security
- monitoring distributed system is difficult
- logging (?)
- How to scale?
-------
### 17:20-17:50 <br> Talk: [Python module in Rust](https://tw.pycon.org/2017/events/talk/325227434406314071/)
- Slider: [Python module in Rust](https://docs.google.com/presentation/d/1mTw-4buKDTqPNzJS03s2I0apBMal-SaeKk1dHDSE6fk/pub?start=false&loop=false&delayms=3000&slide=id.g22c75fc6c3_0_6)
- Speaker: 許邱翔 (Chiu-Hsiang Hsu) (dv)
- Rust community love Python most
- Rust cares memory safety without GC ; Rust is high performance like C
[benchmark](http://benchmarksgame.alioth.debian.org/)
- [PyPI of Rust](https://doc.crates.io/)
- pyvenv + pip -> Cargo
- PEP of Rust -> RFC
Q: why the Rust source code need something like "Extend C"
A: that is for avoiding default behavior "name mangling" like C++
Q: Rust can share memory buffer with Python?
A: yes