九月 18, 2012

hoamon's sandbox
hoamon
hoamon's sandbox is about »

tag cloud

» AWS 初試

因綠際會讓我有機會去研究 Amazon Web Service 。那是個與 GAE 功能相同,但操作模式不盡相同的雲端服務。

GAE 像是個套裝雲端平台,有些東西它已幫你決定好,要就用,不用就拉倒,當然可以寫 ticket 去建議他們,但不一定會立案。犧性自由的收獲就是得到『自動擴展性』,當你的網站流量大時, GAE 自動開分身,也因為你寫的程式一開始就受 GAE 平台的限制,而這些限制的目的主要就是為了提升擴展性,所以一開始在 GAE 上寫網站很痛苦,但後期維護很輕鬆。

AWS 就像是個高級積木組,你想怎麼兜就怎麼組,在自己架站環境中跑的網站,不用改任何一行程式碼就能移至 AWS 上。但等到你的網站流量大,使用者多時,就得再利用 AWS 提供的系統維護工具來自行維護了。缺點當然是你得多請一組系統管理員,但相較於自己搞機房、架站,利用 AWS 平台可以讓系統管理員工作簡單多了。

對我而言,兩種開發平台各有好處,這我當然兩者都學,唯其資源分配乃先 GAE ,後 AWS 。

AWS 的主力產品就是 Elastic Compute Cloud (EC2) ,一個 EC2 可以想像它就是你的一台電腦,只是放在 Amazon 機房裡。

我們可以開一台 EC2 出來後,在裡面安裝 ubuntu, nginx, django, postgresql 等軟體,讓它跑網頁伺服器。或是裝了 postfix 就能變郵件伺服器,或是裝了 vlc 變影音串流伺服器。簡單講,只要有安裝相對應的軟體, EC2 也能變火箭。

但是 EC2 的硬碟不多,近 10 G 而已,如果你想放很多資料,那就需要 Simple Storage Service(S3) 。而且為了擴展性,你也得用 S3 ,用了 S3 ,當網站熱門到得多開幾台 EC2 出來時,它們才有共同儲存的地方。

當網站只用一台 EC2 時,可以把 MySQL/PostgreSQL/Oracle 資料庫裝在同一個 EC2 裡,但當有多個 EC2 時,怎麼辦?  AWS 有給獨立的資料庫伺服器,除了關聯式資料庫( RDS )外,也有 NoSQL ( DynamoDB )的。把資料庫託給 RDS/DynamoDB 管理,也省得自己作備援、備份、調校等管理工作,而且以 Oracle DB 來看,可以不用購買授權改以每小時租用計費,這相當方便。易言之,在 AWS 上花錢就能換得輕鬆。

整個 AWS 架構是在一個虛擬化的機房內,每開啟一個 EC2 實體,它會得到一個虛擬 IP ,我們可以透過 boto(Python base) 去管理它,也可以直接在 AWS Management Console 頁面管理。

目前 AWS 在美國維吉尼亞、奧勒岡、北加州、愛爾蘭、日本、新加坡、巴西聖保羅都有機房。你想把機器開在那裡,自己決定就行了。

如果要讓 EC2 有公共 IP ,可以到 Elastic IPs 去索取一個實體 IP ,但記得在索取後就要把它綁定到 EC2 實體去,如果要了公共 IP ,但沒有拿去用,是會被 AWS 索取 0.01/hours 的罰款,我就被罰了 0.71 元美金,因為我關了 EC2 實體後,並沒有再去退 IP ,結果那個 IP 就被我佔了 71 個小時。

其他 AWS 產品還有 CloudWatch, CloudFront, CloudCache, SQS, SES, SNS, SWF...,實在很多,請自行到官網了解。

目前 AWS 有免費試用方案,方案為註冊後一年之內使用,而每個月的免費額度如下:

AWS Free Usage Tier (Per Month):

  • 750 hours of Amazon EC2 Linux Micro Instance usage (613 MB of memory and 32-bit and 64-bit platform support) – enough hours to run continuously each month*
  • 750 hours of Amazon EC2 Microsoft Windows Server Micro Instance usage (613 MB of memory and 32-bit and 64-bit platform support) – enough hours to run continuously each month*
  • 750 hours of an Elastic Load Balancer plus 15 GB data processing*
  • 30 GB of Amazon Elastic Block Storage, plus 2 million I/Os and 1 GB of snapshot storage*
  • 5 GB of Amazon S3 standard storage, 20,000 Get Requests, and 2,000 Put Requests*
  • 100 MB of storage, 5 units of write capacity, and 10 units of read capacity for Amazon DynamoDB.**
  • 25 Amazon SimpleDB Machine Hours and 1 GB of Storage**
  • 1,000 Amazon SWF workflow executions can be initiated for free. A total of 10,000 activity tasks, signals, timers and markers, and 30,000 workflow-days can also be used for free**
  • 100,000 Requests of Amazon Simple Queue Service**
  • 100,000 Requests, 100,000 HTTP notifications and 1,000 email notifications for Amazon Simple Notification Service**
  • 10 Amazon Cloudwatch metrics, 10 alarms, and 1,000,000 API requests**
  • 15 GB of bandwidth out aggregated across all AWS services*

我已把未送到 bitbucket.org 的專案及 zotero webdav 丟上 AWS 了。

自己家裡的機器正式結束「網站」的工作,專職作「寫程式機」了。

六月 28, 2011
» build Psycopg2 failed on Windows

每個時代都在遇到的問題:套件TMD裝不起來。

就腳本語言(script language)來說,套件在 Windows 上的問題還滿嚴重的。

pip install Psycopg2

.\psycopg/lobject.h(29) : fatal error C1083: Cannot open include file: ‘libpq/li

bpq-fs.h’: No such file or directory

這時可以指定 pc_config.exe 這樣自己來 build 看看(參考)

cd build\Psycopg2

python setup.py build_ext —pg-config=C:\path\to\pg_config.exe build

build 成功的話可以 pip install Psycopg2 了

如果在安裝時若出現 “mt.exe” not found…

則需要把 xxx 版的 Windows SDK 加入環境變數的路徑(Path)

例:C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin

有點髒的解法,給混沌的世界。

» build Psycopg2 failed on Windows

每個時代都在遇到的問題:套件TMD裝不起來。

就腳本語言(script language)來說,套件在 Windows 上的問題還滿嚴重的。

pip install Psycopg2

.\psycopg/lobject.h(29) : fatal error C1083: Cannot open include file: ‘libpq/li

bpq-fs.h’: No such file or directory

這時可以指定 pc_config.exe 這樣自己來 build 看看(參考)

cd build\Psycopg2

python setup.py build_ext —pg-config=C:\path\to\pg_config.exe build

build 成功的話可以 pip install Psycopg2 了

如果在安裝時若出現 “mt.exe" not found…

則需要把 xxx 版的 Windows SDK 加入環境變數的路徑(Path)

例:C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin

有點髒的解法,給混沌的世界。

一月 27, 2010
» Upcoming Django 1.2 & PostgreSQL 9.0

http://docs.djangoproject.com/en/dev/topics/db/multi-db/#topics-db-multi-db
Django 1.2 新功能: Multiple databases

PostgreSQL 9.0 新功能 Hot Standby跟Streaming Replication

http://wiki.postgresql.org/wiki/Streaming_Replication

http://developer.postgresql.org/pgdocs/postgres/hot-standby.html

還沒空試, 不過結合這幾個新功能的話似乎可以有效的分散django資料庫端的read/write, 將write-only database server上的WAL(write-ahead log) 即時streaming到read-only database server上的hot standby database, 感覺好像不錯~~

四月 25, 2009

hoamon's sandbox
hoamon
hoamon's sandbox is about »

tag cloud

» Does IBM Merge Sun? No, but Oracle will.


引自:http://www.techcrunch.com/wp-content/uploads/2009/04/oracle-sun.png


事實上, IBM 買 Sun ,就產品線而言,只有一個 Java 對它是值錢的,其他的 Sparc CPU, Solaris OS 對 IBM 而言,都是「無用的」,因為它光是整合自己的資產都花了不少心力了,何況還要拿一個架構幾乎不同的東西來研究,雖然就 Solaris 來說,它比 AIX 好用,但又如何! IBM 自己也在發展 Linux 呀,何必再拿 Solaris 上架。

至於 MySQL 方面,雖然它與 DB2 有互補效應,不過,我認為這些原本用 MySQL 的網站,就算將來搞大了, MySQL 撐不住時,要它換 DB2 ,它們也不見得願意,換 PostgreSQL 的可能性都還會比 DB2 Express-C 高點。

事實上,除了一起推廣 Java 外, IBM 與 SUN 根本就是彼此的大對頭,像是:
Sparc V.S Power
Solaris V.S AIX
NetBeans V.S Eclipse(還故意叫「日蝕」)
PostgreSQL + MySQL V.S DB2
GlassFish V.S Websphere
只可惜在規模上, SUN 遠遠不如 IBM 。

所以 IBM 實際上是拿 65 億美金買了 Java (事實上, Java 也是 Sun 在紐約證交所的代號)。日前因收購消息, Java 的市值也差不多來到 60~70 億美元附近。

然而,事情沒那麼簡單,以 IBM 這個企業巨人而言,出此招絕不是只有在技術面上考量而已,還有策略。

當 IBM 叫囂要買下 SUN 的同時,其實就算後來沒買到,這都已經讓 IBM 得利了。怎麼說,先說說買下 SUN 的情況, IBM 將完全掌握 Java ,雖然它本身是 Open Source 軟體,但未來 IBM 絕對可控制 Java 語言的方向; 但在沒買下的情況中, IBM 也會有所收獲,因為它對那些 SUN 原有客戶及潛在客戶喊話:「現在買 SUN 的機器是沒有保證的,因為我可以花錢讓你們買的機器沒有未來擴充性。」

我認為這購併真是 IBM 的高招呀! 不過,我想 SUN 應該早就明白這一點了,所以它在2004年即努力地將過去的成果拼命 Open Source 化,讓客戶認知 - 使用它們的產品就算公司倒了,也能繼續運作下去,不過是少了塊 Logo 而已。

直到昨天,我都還認為 SUN 應該就這麼倒下去了吧!因為它們拒絕了 IBM 的購併提議。然而,昨天出現了大逆轉: Oracle 加入戰局了。

Oracle 打算拿出 74 億美金併購 SUN ,而這一點也經 SUN 董事會同意了,現下只等股東會開會通過, SUN 就成了 Oracle 的一份子。相較於 IBM 花 65 億只買下 Java , Orcale 買 74 億買 MySQL, Sparc, Solaris,Java 就顯得非常划算了。

一直以來(從學會 vi 開始),我對 SUN 的產品(除了 Java)都非常有好感, 因為 Bill Joy 是 SUN 的四位創辦人之一,而他的成就改變了我這一生使用電腦的方式 - 總是在 Escapse。

最近也裝了 OpenSolaris 2008.11 ,雖然在使用習慣上,還是離 Ubuntu 有一段距離,但它有個耀眼的功能,是我非常欣賞的,而這功能對「不使用版本控制器的人」來說,可算是「殺手級應用」。那就是「時間軸」功能。在 OpenSolaris 中,啟動「時間軸」功能後,則你在 ZFS 磁區中的所有檔案都會被作快照,所以當你想找出兩天前被你誤刪的檔案就非常簡單啦。詳情請見ZFS snapshot visualization in GNOME

三月 11, 2009
» PostgreSQL backup/restore command (Quick-Note)

把 PostgreSQL backup/restore 會用到的 command 以及參考資料作個整理:

環境建制 (安裝):
$ sudo apt-get install apache2 php5 libapache2-mod-php5 libapache2-mod-auth-pgsql php5-pgsql phppgadmin postgresql-8.3

切換成 postgres 的身份執行:
$ sudo -u postgres psql template1

修改 postgres 的密碼:
template1=# alter user postgres with password ‘PASSWORD’;

建立 pg_root 使用者 (平日存取用途):
template1=# create user pg_root with password ‘PASSWORD’ createuser;

全伺服器備份:
$ pg_dumpall -U pg_root > dump-all.sql
$ pg_dumpall -U postgres > dump-all.sql

使用 postgres 登入之後,還原全伺服器:
$ psql -U postgres < dump-all.sql

單一備份資料庫:
$ pg_dump cbeta -U pg_root > cbeta-dump.sql
$ pg_dump cbeta -U postgres > cbeta-dump.sql

使用 postgres 登入之後,單一資料庫還原:
$ psql -d cbeta -U postgres < cbeta-dump.sql

在 postgres 帳戶家目錄建立 .pgpass
$ cat > .pgpass
localhost:5432:database:username:password
[Ctrl+D]
$ chmod 600 .pgpass

使用 postgres 使用者於 Crontab 中自動備份資料庫:
# vi /etc/crontab
sudo -u postgres pg_dump cbeta > cbeta-dump.sql
sudo -u postgres pg_dumpall > dump-all.sql

參考資源:

一月 22, 2008

hoamon's sandbox
hoamon
hoamon's sandbox is about »

tag cloud

» Trac0.11b1 + Mercurial + Postgresql

基於對 Python 的喜愛,所以想要把 subversion 換成 Mercurial ,但目前還只是測試階段,真正上線使用的還是 subversion 。另外一直都想要找個機會把 Mysql 換掉,到不是說 Mysql 不好用,而是我對於 PostgreSQL 本來就有一分感情,那是在 Mysql3,4 還不支援 UTF-8 時,我用 Perl 寫了一個 unicode 字的查詢系統。

而今天所要介紹的,不過是我在工餘之際把玩的小小玩意,既然成功了,那就作個紀錄。

在 Ubuntu 安裝軟體是一點都不難的(只要有 .deb 檔),所以要裝 Trac + PostgreSQL + Mercurial ,請執行下面指令:

# sudo apt-get install postgresql-client-8.2 postgresql-8.2 python-psycopg2 \
> python-setuptools python-genshi \
> python-psycopg2 python-pygments python-docutils mercurial

接下來,安裝 Trac 0.11b1 主程式
# sudo easy_install http://ftp.edgewall.com/pub/trac/Trac-0.11b1.tar.gz

最後安裝 Trac 控制 Mercurial 的外掛
# svn co http://svn.edgewall.com/repos/trac/sandbox/mercurial-plugin-0.11
# cd mercurial-plugin-0.11/
# sudo python setup.py install

再來是設定,首先我們建立一個 dbuser ,這方面, PostgreSQL 有點奇怪,或許是我 Mysql 用久了,
# sudo -u postgres createuser trac -P
Enter password for new role:
再輸入一次:
Shall the new role be a superuser? (y/n) n
Shall the new role be allowed to create databases? (y/n) n
Shall the new role be allowed to create more new roles? (y/n) n
CREATE ROLE
# sudo createdb -O trac trac
並將 pg_hba.conf 中的
local all all ident sameuser
改成
local all all password

這樣你的 trac 程式就可以透過帳號: trac 密碼: trac host: localhost 的方式與 PostgreSQL 連接了。

接下來,初始化 trac 設定目錄及 hg 儲存庫:
# trac-admin /path/to/myproject initenv
# hg init /path/to/myproject/hg

另外在 trac.ini 中加入
[components]
tracext.hg.* = enabled

[hg]
show_rev = yes
node_format = short

用 tracd --port 8000 /path/to/myproject 測試一下有沒有問題,沒有問題就讓 mod_python 來跑吧!

下面則是 mod_python 的設定檔


NameVirtualHost *:443

ServerAdmin admin@xxx.com
ServerName trac.xxx.com
DocumentRoot /www/trac

SetHandler mod_python
PythonHandler trac.web.modpython_frontend
#PythonPath "sys.path+['/usr/local/Trac/lib/python2.5/site-packages/']"
PythonOption TracEnv /www/trac
PythonOption TracUriRoot /
PythonDebug Off
SetEnv PYTHON_EGG_CACHE /www/trac/tmp
SetEnv LANG UTF-8
SetEnv HTTPS 1
AuthType Basic
AuthName "Trac Server"
AuthUserFile /www/htpasswd_users
Require valid-user

ErrorLog /var/log/apache2/trac_error.log
LogLevel warn
CustomLog /var/log/apache2/trac_access.log combined
ServerSignature Off
SSLEngine On
SSLCertificateFile /etc/apache2/ssl/apache.pem

biggo.com.tw

A Django site.