【問題】有人能夠預算FTTB架伺服器的流量?



贊助商連結


頁 : 1 2 [3]

sfilc
2006-05-23, 10:34 AM
禁轉載


但是你要考慮到資料保密 硬碟壽命 等問題

大流量大存取狀態下硬碟很快救掛了 可能要用兩套RAID5來互相備援


資料保密:程式要寫好, 注意SQL Injection


不管你用哪種SQL軟體
網頁程式寫不好
就一定會有SQL Injection的問題



SQL Injection 我這裡以asp.net+會員登入為範例

SQL Injection 是很多人常會犯的錯誤
舉例像是這一條

SqlConnection.CommandText = "SELECT * FROM userlist WHERE id = '" + Request.Form.Get("id") + "' AND password = '" + Request.Form.Get("password") + "'";

發現到哪裡錯誤了嗎?
此時駭客只要在填帳號欄位, 密碼欄位免填
打上 admin' --
sql查詢就會變成這樣
SELECT * FROM userlist WHERE id = 'admin' --' AND password = ''

關鍵點就是在把密碼欄位標記成註解了
此時駭客就可以免密碼直接登管理員帳號了
甚至你可以直接用它來控制伺服器呢

刪掉資料庫,就可以填上
' ; DROP Database <資料庫名稱>--

如果有使用延伸預存程序的話
甚至可以隨意在server新增與幹掉檔案,服務,登錄
如果windows又沒設密碼或是密碼太好猜,
還可以使用xp_cmdshell命令,隨意執行程式.幹掉整台伺服器

解決方式也很簡單..
要進sql之前,有需要使用者輸入資料的話
把如果是字串的話,把單引號給加上跳脫字元
如果是數字的話,
檢查看看它是不是一個數字之後再進sql

asp.net的話

SqlConnection.CommandText = "SELECT * FROM userlist WHERE id = '" + AntiSqlInjection(Request.Form.Get("id")) + "' AND password = '" + AntiSqlInjection(Request.Form.Get("password")) + "'";

public string AntiSqlInjection(string var)
{
return var.Replace("'", "''");
}


php的話;

$sql = "SELECT * FROM userlist WHERE id = '" . AddSlashes($_POST['id"]) . "' AND password = '" . AddSlashes($_POST["password"]) . "'";







硬碟壽命:快取要做好, 頻繁存取的資料就丟memory ,
不要每一次都從database撈資料出來


還有硬碟大小問題~免費會員100M 付費會員1G 那你可能需要N顆硬碟來做
在來推廣期間的負擔 這段期間 廣告支出 網路支出 硬體維護
少說也得50萬~100萬
結論就是
要做到無名那樣 少說也得花個 200~300萬 來撐過推廣期的1~2年

還有人事支出,軟硬體支出,電費支出


大型系統都是用NAS+RAID來存的
而不會純用RAID
除非是資金不足,
要不然不會純用RAID來存
當然NAS很貴的

大型系統,像yahoo這類的
後面都是大量的伺服器叢集
純用php或是asp來做到大型系統是不可能
純用.net或許還可以
每年得保證運轉達99.99&

如果純用php或是asp
或是現成套件拿來改一改來用
那只能算是小型系統


至於你說硬碟會很快掛掉,需要兩套raid來做

但是以儲存為主的程式(像是:網路硬碟,相簿,信箱)
我們現在把一個硬碟分給5000個會員來用好了
可能這5000個會員之中
只有50個人登入,而不是人人都登入
而這顆每秒可能5個讀取次數
除非你的使用者有練是"超級快速看網頁法"
一秒可以看一個網頁, 那另當別論


免費會員的話raid0就好了
付費會員再用raid5


至於論壇,部落格,這種以文字為主的程式的話
一句話 cache
這關係到網頁程式怎麼寫
不要每次都從資料庫撈資料出來
較常被讀取的文章就丟memory
memory的速度絕對比硬碟快
現在的memory動不動每秒讀寫就是好幾GB


如果是用asp.net+sql server的話
在頭頂上丟上一條
<%@ outputcache duration="1000" varybyparam="*" sqldependency="連接字串:資料表或是檢視表名稱" %>

他能自動化幫你處理這類的問題
幫你把撈過的資料CACHE在網頁伺服器的MEMORY
而且資料庫有新的資料的話
還會幫你自動更新MEMORY的資料
當然還需要reg sql
怎麼啟動我這就不說了
請去google搜尋sqldependency
當然sqldependency想法也可以應用在相簿,網路硬碟,信箱這類的
不過變成快取分類目錄,或是設定之類的


PHP+MYSQL要做到這件事情比較難
因為php沒這功能
mysql也沒有資料變更通知功能
但還是有替代方法
就是在MYSQL打開query cache
等於說變成資料快取MYSQL的記憶體


還有就是能快取的東西就快取...
能靜態的東西就靜態



SQL上面的索引記得要設定索引

有索引跟沒索引差很多
索引的原理是:

A
|
A-C B-F ...........
|
A
|
admin abcdefg a0001
|
資料

至於搜尋,別呆呆的用LIKE會慢死
SQL SERVER的話請用FULL TEXT CATALOGS