iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 18
0

簡介

今天來介紹 Pyramid 專案做到 Serverless ,有幾個步驟,第一需要把 breaker 記錄 session 的功能改成使用 Redis 來記錄 session,這樣才不會在附載平衡的時候,有 session 不同步的問題,之前在部署的時候因為沒有注意到 Session 問題,導致有一些問體產生,比如說一下有登入,一下又被登出,就是因為 session 不同步的問題.再來是 Sqlite DB 改成 Postgresql DB,讓 DB 自己一個 VM,或是使用 Google PostgreSQL DB 的服務.

使用 Redis DB 記錄 session

安裝 pyramid_redis_sessions

source env/bin/activate
pip install pyramid_redis_sessions

or

修改 setup.py 的 requires 加入 pyramid_redis_sessions

...
requires = [
    'pyramid',
    'pyramid_jinja2',
    'pyramid_debugtoolbar',
    'pyramid_tm',
    'pyramid_redis_sessions',
    'SQLAlchemy',
    'transaction',
    'zope.sqlalchemy',
    'waitress',
    ]
...

安裝 pyramid_redis_sessions

source env/bin/activate
python setup.py develop

設定 redis 連線資訊 在 ini 設定檔

設定 development.ini

...
# redis
redis.sessions.secret = b'{])o/\xe5\x17\xf5\xef]\xce\x90\xea2\x99i\x8c/\xd1\x1a\xe9'
redis.sessions.timeout = 21600
redis.sessions.cookie_name = session
redis.sessions.cookie_max_age = 21600
redis.sessions.host = 127.0.0.1
redis.sessions.port = 6379
redis.sessions.charset = utf-8
...

設定 production.ini

...
# redis
redis.sessions.secret = b'{])o/\xe5\x17\xf5\xef]\xce\x90\xea2\x99i\x8c/\xd1\x1a\xe9'
redis.sessions.timeout = 21600
redis.sessions.cookie_name = session
redis.sessions.cookie_max_age = 21600
redis.sessions.host = 127.0.0.1
redis.sessions.port = 6379
redis.sessions.charset = utf-8
...

修改 sqlite 到 postgresql,使用 psycopg2 來連結 postgresql DB

設定 ini

development.ini

...
修改 sqlalchemy.url = sqlite:///%(here)s/ithome_pellok_2018.sqlite
改成 sqlalchemy.url = postgresql+psycopg2://postgres:password@localhost/job178website
...

development.ini

...
修改 sqlalchemy.url = sqlite:///%(here)s/ithome_pellok_2018.sqlite
改成 sqlalchemy.url = postgresql+psycopg2:///job178website
...

結論

我們把專案無狀態化之後就可以橫向擴張專案,當效能有遇到問題的時候只要多開幾台服務,就可以解決XD.

參考

pyramid_redis_sessions
pyramid web application


上一篇
Day 17 Jenkins 整合 Kubernetes 部署
下一篇
Day 19 專案 Docker Compose
系列文
DevOps學習之旅30

1 則留言

0
cwchiu
iT邦新手 4 級 ‧ 2018-10-29 11:27:20

"記錄 session 的功能改成使用 Reids 來記錄 session"

我想應該是 "Redis"

pellok iT邦新手 5 級‧ 2018-10-29 11:40:32 檢舉

感謝提醒,已修正謝謝

我要留言

立即登入留言