九月 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 了。

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

» Tomcat6 + JSP + JNDI + Oracle 設定

朋友公司最近想要接個案子:『在 AWS 上面架一個 JSP 網站,而且指定資料庫須用 Oracle DB 』。

用 Oracle DB 不是難事,拿信用卡註冊進去就有了,跑一個小時最低收你 0.17 美金(約臺幣 6 元),很多人都付得起。麻煩的是朋友及我都不是熟 JAVA 及 Oracle 的人。因為我們愛用 Open Source (奇怪 JAVA 明明就是 Open Source 呀! 怎麼我直覺不是呢???)。

為此,我找了高中同學 K ,他可是名門正派(資工背景)出身,從 C , Delphi , VisualBasic , JAVA , .Net 一路走來的程式設計師。而且他幫客戶開發時,多半是採用 Oracle 或是 SQL Server 的資料庫。於是一拍即合。

那我要幹麼呢? 也不是作個牽溝仔怎麼簡單的工作就結束了。 K 只熟 Windows ,而那個 AWS EC2 是要跑 Linux 的。所以我的工作就是搞定 Linux 上的 Http 伺服器( Apache or Nginx )、 AP 伺服器( Tomcat6 ) 及 JNDI Container (其實,我一直想不懂這 JAVA 或物件導向的術語)。

在 AWS 上租用 Oracle DB 是即用即付的,所以我想要在本機先測試 Tomcat6, JNDI 設定成功後再送上去。

我的作法是在本機的 VirtualBox Windows 上裝一個 Oracle 11g express (因 Oracle 沒出 Ubuntu 版),再作一個 1521 port 的 forward ,下載 sqlplus, basic 套件,測試連線正常:

$ sqlplus test/test@//localhost/XE

第一個 test 表帳號,第二個表密碼,最後面的 XE 表資料庫實例的名稱,預設是 XE 。能看到 SQL> 提示就表示可連線 Oracle 11g 了。

安裝 Tomcat6 非常簡單,在 Ubuntu 中打上 apt-get install tomcat6 就夠了。接下來去抓 Oracle 的 jdbc driver: ojdbc6.jar ,置入 /usr/share/java 目錄。然後修改 tomcat6 設定檔:

# /etc/tomcat6/catalina.properties
common.loader=${catalina.base}/lib,${catalina.base}/lib/*.jar,${catalina.home}/lib,${catalina.home}/lib/*.jar,/var/lib/tomcat6/common/classes,/var/lib/tomcat6/common/*.jar,/usr/share/java/*.jar

# /etc/tomcat6/content.xml

<Context>
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<Resource name="jdbc/OracleDB" auth="Container"
type="javax.sql.DataSource" driverClassName="oracle.jdbc.OracleDriver"
url="jdbc:oracle:thin:@localhost:1521:XE"
username="test" password="test" maxActive="20" maxIdle="10"
maxWait="-1"/>
</Context>

# /var/lib/tomcat6/webapps/MyApps/WEB-INF/web.xml

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<display-name>My Web Application</display-name>
<description>
A application for test.
</description>
<resource-ref>
<description>Oracle Datasource example</description>
<res-ref-name>jdbc/OracleDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</web-app>

然後在 /var/lib/tomcat6/webapps/MyApps/ 放入一個 test_oracle.jsp 程式:


<%@ page import="java.sql.*" %>
<%@ page import="javax.sql.*" %>
<%@ page import="javax.naming.*" %>
<%@ page language="java" contentType="text/html;charset=UTF8" %>
<%
Connection con = null;
Context initContext = new InitialContext();
Context envContext = (Context)initContext.lookup("java:/comp/env");
DataSource ds = (DataSource)envContext.lookup("jdbc/OracleDB");
try {
con = ds.getConnection();
if(!con.isClosed()){
out.println("與 Oracle db 有連線!!\n<br/>");
}
con.close();
} catch (SQLException sqle) {
out.println("sqle = "+sqle);
} finally {
con = null;
}
%>

最後到瀏覽器去觀看 http://localhost:8080/MyApps/test_oracle.jsp 網頁,有看到『與 Oracle db 有連線!! 』那就成功了。


四月 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

biggo.com.tw

A Django site.