kke
July 19, 2008, 1:12am
21
ถ้าใช้งานคล้ายๆแบบที่ว่ามา ผมว่าลองดูระบบร้าน 7/11 ดีกว่าครับ ว่าเขาทำยังไง
จำเป็นหรือไม่ที่ต้องดึงข้อมูลแบบ realtime แล้วเครื่อง pos แต่ละสาขา connect ตรงไปที่ db หรือว่าผ่าน web application อีกชั้นหนึ่ง
แล้วถ้าเนตเสียล่ะ งดขายของจนกว่าเนตจะใช้ได้?
แต่ถ้าที่จะใช้งานจริงเป็น client ที่อยู่บนเนต ก็อีกเรื่องนึง
คำว่า table indexไว้ดีหรือยังนิ ต้องดูตรงไหนครับ?
มีผลวิจัยการ benchmarkไหมครับ ว่าควรindexแบบไหน และแบบไหนไม่ควร? ช่วยขยายความหน่อยครับ หรือบอกเว็ปที่บอกวิธีการทำtable indexที่ดีที่สุดด้วยครับ ผมอยากศึกษาและเข้าใจมากขึ้น…
ลักษณะของระบบ…สมมุตินะครับ ประมาณว่าร้านสะดวกซื้อแบบสมาชิกสหกรณ์ ที่มีประมาณ1500ร้านทั่วกทม. แต่ละร้านก็จะมีประมาณ3-4pos(client)
และเมื่อมี การกดรหัสสมาชิก และรหัสสินค้า(หรือยิงbarcode)มาก็จะส่งข้อมูลมาselectรหัสสินค้าและข้อมูลสมาชิก ที่ server(ที่กำลังพูดถึง).เพื่อแสดงข้อมูลสินค้าตามรหัสสินค้านั้นๆ และข้อมูลสมาชิกทั้งหมด คือทุกร้านไม่มีdatabaseของรหัสและข้อมูลสินค้า พอมีการจ่ายเงินก็จะส่งมา insert ที่ database server ครับ
ทุกการselectรหัสสินค้าเพื่อดึงข้อมูลสินค้าขึ้นมา จะต้องมีการselect อีก5 table(ดึงข้อมูลสมาชิกสหกรณ์ขึ้นมาด้วย ชื่อ-สกุล ว่าเคยซื้ออะไรไปบ้างใน1เดือนหรือ ยอดที่ซื้อไปใน1เดือน มีอะไรบ้าง แสดงบนจอทั้งหมดให้ลูกค้าดูได้) selectโดยไม่มีการใช้ join เพราะผลbenchmark join table ช้ากว่าselectแบบแยกครับ
ผมประมาณการตอนเที่ยงๆ ทุกร้านมีลูกค้าเยอะ โอกาสที่ทั้ง 1500 ร้าน จะมีการส่งข้อมูลมาที่server ในวินาทีเดียวกันมีสูง จริงๆแล้วแต่ละร้านก็มี3-4clientด้วย ซึ่งอาจจะถือว่ามีการrequest มากกว่า1500ครั้งต่อวินาทีเป็น 4500-6000ครั้งต่อวินาทีด้วย
แต่ละrequestจะมีการquery 6 table รวมเป็น 1500x6=9000 query/sec(ขั้นต่ำ แต่เป็นไปได้ถึง36,000query/sec)
เหตุการณ์ร้านสหกรณ์สะดวกซื้อนี้เป็นการสมมุตินะครับ… จริงๆระบบมันใกล้เคียงกับเรื่องนี้มากครับ
ระบบ app มันประมาณเนี่ยครับ
osเป็นlinux ครับ แต่ยังไม่สรุปว่าจะใช้ตัวไหน
ระหว่าง R300 กับ PowerEdge 2950 III อันเหมาะสมกว่าครับ?
แล้วถ้า PowerEdge 2950 III ต้องใช้แยก database กับ webเป็น2เครื่องรึเปล่าครับ หรือตัวเดียวอยู่เลย?
Table Index ก็ง่ายสุด อันไหนเรียกใช้บ่อย ๆ ก็ต้องทำ Index เอาไว้ อันไหนไม่ได้เรียกใช้ก็ไม่ต้องทำ
แล้วก็ดูเรื่อง Normalization ครับ
ไม่่มี local inventory หรือครับ? แล้วทำไม่ต้อง query จากศูนย์เท่านั้น
ไม่ค่อยเข้าใจ logic แต่ถ้าเป็นผมทำ distribute ออกมาถ้าจำเป็นก็ sync เอา
เอ่อพี่ Max ทำไมไม่แนะนำ 2950 แบบ 3.5 ละครับ น่าจะได้ Storage มากกว่านะ แถมเร็วกว่า
ใส่ HD ได้ 6 ลุก SAS 300G 15K 6 ตัวได้เลย
mean
July 19, 2008, 1:57am
25
นั้นสิครับ หากเป็นระบบคล้ายกับที่ว่าจริง หากเกิดปัญหาในลักษณะนี้ต้องหยุดการขายทีเดียวครับ
การแยก Service อย่างที่หลายๆ ท่านด้านบนแนะนำมาก็เป็นที่น่าสนใจนะครับ
เพื่อลดภาระในการแสดงผล และ query ให้ทำงานได้เต็มที่มากขึ้นครับ
หรือเป็นไปได้ไหมครับ 2 Server
เรื่องแรก httpd and database
เครื่องสอง database
sync ข้อมูลกันและกัน
หากมีงานเข้ามาอาจจะ random การ query ข้อมูลไป 1 หรือ 2 อาจจะช่วยแบ่งเบาเรื่อง Buffer ในการส่งถ่ายข้อมูลได้เหมือนกันครับ
แต่ก็อาจจะเกิดโอกาส ในความผิดพลาด ในการ select หรือ insert สูงเหมือนกัน = ="
หรือ เครื่องแรกเขียนระบบเพื่อการ insert เท่านั้น
sync ข้อมูลกันและกัน
เครื่องที่สองเพื่อการ query ข้อมูลเท่านั้น อืมจะช่วยให้การทำงานมีประสิทธิภาพมากขึ้นไหมหน่อ (เพียงลองคิดเล่นๆ นะครับ แต่การนำมาใช้งานจริงคงไม่ work)
อย่าว่ากันนะครับ เพียงลองคิดนอกกรอบ จากระบบที่ควรทำ เล่นๆ เท่านั้นครับ
kke
July 19, 2008, 2:01am
26
ถ้าผมออกแบบระบบผมจะ cache ข้อมูลไว้ที่ client โดยมี expire time ตั้งแต่ 5 ถึง 60 นาทีแล้วแต่ความถี่ของการ update ข้อมูล
หรืออีกแบบคือ ถ้าข้อมูลใหนมีการ update ก็ต้องหาวิธีบอก client ให้รู้ว่ามีการ update ให้มาดึงอันใหม่ไป cache ไว้
ส่วนข้อมูลการขายที่ต้อง insert ลงตาราง อันนี้ก็อยู่ที่ว่าซีเรียสแค่ใหนที่ต้อง update แบบ realtime
จริงๆเก็บไว้ที่ client แล้ว update วันละ x ครั้ง ก็น่าจะพอ แต่ทั้งนี้มันก็อยู่ที่ความต้องการของลูกค้าเป็นหลัก
counter service ที่ร้าน 7 ยังรับชำระเงิน แล้วเก็บข้อมูลไว้ในเครื่อง client เลย upload เข้าศูนย์วันละแค่ 1-2 ครั้งเอง
แต่ละที่เวลาไม่เท่ากัน บางที่ก็ตอน 6 โมง บางที่ 2 ทุ่ม บางที่ เที่ยงคืน
system
July 19, 2008, 2:09am
27
ถ้าผมออกแบบระบบผมจะ cache ข้อมูลไว้ที่ client โดยมี expire time ตั้งแต่ 5 ถึง 60 นาทีแล้วแต่ความถี่ของการ update ข้อมูล
หรืออีกแบบคือ ถ้าข้อมูลใหนมีการ update ก็ต้องหาวิธีบอก client ให้รู้ว่ามีการ update ให้มาดึงอันใหม่ไป cache ไว้
ส่วนข้อมูลการขายที่ต้อง insert ลงตาราง อันนี้ก็อยู่ที่ว่าซีเรียสแค่ใหนที่ต้อง update แบบ realtime
จริงๆเก็บไว้ที่ client แล้ว update วันละ x ครั้ง ก็น่าจะพอ แต่ทั้งนี้มันก็อยู่ที่ความต้องการของลูกค้าเป็นหลัก
counter service ที่ร้าน 7 ยังรับชำระเงิน แล้วเก็บข้อมูลไว้ในเครื่อง client เลย upload เข้าศูนย์วันละแค่ 1-2 ครั้งเอง
แต่ละที่เวลาไม่เท่ากัน บางที่ก็ตอน 6 โมง บางที่ 2 ทุ่ม บางที่ เที่ยงคืน
เท่าที่เคยเข้า 7/11 จะเห็นใช้เครื่อง lenovo
SAS 300GB 15K ราคามันสูงกว่ากันเยอะนะครับ
[quote author=maxlogic link=topic=12448.msg121402#msg121402 date=1216408420]
SAS 300GB 15K ราคามันสูงกว่ากันเยอะนะครับ
[quote author=hack3rb43 link=topic=12448.msg121405#msg121405 date=1216409164]
อ๋อเข้าใจฮะ 1+0 นี้ัมัน 10 ใช่มะ ผมลองแล้วก็เหมือน Raid 0 แต่ + 1 ฮ่าๆ งงมะ
ผมลองทำ
ข้อมูลด้านสินค้า cacheไม่ได้เลยครับเพราะสินค้ามีเยอะมาก
ส่วนข้อมูลสมาชิกก็cacheไม่ได้เหมือนกัน เพราะแต่ละคนคงไม่มีข้อมูลเหมือนกัน และแต่ละคนสามารถซื้อของจากร้านสาขาไหนๆก็ได้ครับ ไม่fixว่าต้องเป็นร้านเดิมเท่านั้น สมมุติว่ามีสมาชิก 2 แสนคนจะcacheยังไงดี
ที่ต้องทำเป็นreal timeเพราะจำเป็นครับ ถ้าnetเสียก็คงต้องแสดงข้อมูลว่าnetworkล่มปิดการขายชั่วคราว(คล้ายๆตู้atm ตอน out of order หนะครับ) หรือทางแก้อาจจะใช้2 isp connectพร้อมกัน แต่server ต้องห้ามล่ม
สรุปว่าระบบผม ต้องใช้ 2950 กับ RAID 5 หรือ RAID1+0 ครับ?
ที่ไหนขายถูกพร้อมconfigให้เสร็จบอกผมนะครับ
ตอนนี้เจอ2ที่ไม่ทราบว่าราคาokรึเปล่าครับ
hxxp://www.pantiphost.com/dell-pe2950.html
hxxp://www.bangkokwebhosting.com/dell-2950.htm
แล้วตกลงตัว R300 น่าจะรับไม่ไหวใช่ไหมครับ? จริงๆอยากเสนอheadสัก 2 ราคา
คือ1.แบบถูกแต่ทำงานได้ และ2.แบบแพงทำงานดีและชัวร์รับประกัน
ป.ล.ยังติดใจว่าProliant DL360 G5มันไม่ดีหรือว่ามันแพงเกินไปเลยไม่มีคนแนะนำครับ ? ขอคอมเมนต์ตัวนี้ด้วยครับ
hxxp://www.2beshop.com/server.php?type1=Server&name=Proliant%20DL360%20G5
130000 นี้กด 2950 ได้สเปคดีๆเลยนะครับ
2950
2 CPu Quad Xeon 2. อะไรก็ลืม
Ram 4 G
HD SAS 146 15K 4 ตัว
ราคาราวๆ 120K คับ ประมาณนะ
ข้อมูลด้านสินค้า cacheไม่ได้เลยครับเพราะสินค้ามีเยอะมาก
ส่วนข้อมูลสมาชิกก็cacheไม่ได้เหมือนกัน เพราะแต่ละคนคงไม่มีข้อมูลเหมือนกัน และแต่ละคนสามารถซื้อของจากร้านสาขาไหนๆก็ได้ครับ ไม่fixว่าต้องเป็นร้านเดิมเท่านั้น สมมุติว่ามีสมาชิก 2 แสนคนจะcacheยังไงดี
อาจจะลองดูสถิติคนที่มาใช้บ่อย ๆ น่ะครับ แต่ถ้าหลากหลายมาก ๆ ก็คง cache ไม่ได้
kke
July 19, 2008, 4:03pm
34
ข้อมูลด้านสินค้า cacheไม่ได้เลยครับเพราะสินค้ามีเยอะมาก
ส่วนข้อมูลสมาชิกก็cacheไม่ได้เหมือนกัน เพราะแต่ละคนคงไม่มีข้อมูลเหมือนกัน และแต่ละคนสามารถซื้อของจากร้านสาขาไหนๆก็ได้ครับ ไม่fixว่าต้องเป็นร้านเดิมเท่านั้น สมมุติว่ามีสมาชิก 2 แสนคนจะcacheยังไงดี
ที่ต้องทำเป็นreal timeเพราะจำเป็นครับ ถ้าnetเสียก็คงต้องแสดงข้อมูลว่าnetworkล่มปิดการขายชั่วคราว(คล้ายๆตู้atm ตอน out of order หนะครับ) หรือทางแก้อาจจะใช้2 isp connectพร้อมกัน แต่server ต้องห้ามล่ม
ทำความเข้าใจคำว่า cache ก่อนครับ
cache ไม่ใช่ backup ข้อมูลทั้งหมดมาไว้ที่ client แต่เป็นการเก็บข้อมูล ที่เคยเรียกมาแล้วไว้ชั่วคราว
สมมติว่าลูกค้า A ซื้อสินค้า 20 ชิ้น
ตอน scan บัตรสมาชิก ก็ต้องทำการเรียกข้อมูลสมาชิกคนนั้นมาที่ client ตัว client ก็จะเก็บข้อมูลนั้นไว้ชั่วคราว
ตอน scan สินค้าแต่ละชิ้น ข้อมูลของสมาชิกนั้นก็จะไม่มีการเรียกซ้ำจาก server เพราะมีอยู่ใน cache แล้ว
และเช่นกันสินค้า 20 ชิ้นที่เรียกข้อมูลมาก็จะ cache เอาไว้เช่นกัน ถ้าสมาชิกคนต่อไปมีสินค้าที่ซ้ำกับคนแรก ชิ้นนั้นก็มีข้อมูลใน cache ไม่ต้องเรียกใหม่ เป็นการลดการ query ผ่านเนตได้อย่างมาก
ตัวจัดการ cache คือหัวใจสำคัญ อยู่ที่การออกแบบ แต่เอาแบบง่ายๆก็อาจจะเก็บสินค้าไว้ 200 รายการ ถ้ามีเกินก็ลบรายการที่เรียกไว้เก่าสุดออก เอาอันล่าสุดใส่เข้าไปแทน หรืออาจจะดูจากจำนวนที่ขายไปอันใหนขายได้มากก็เก็บไว้นาน ขายได้น้อยก็ลบออก
แต่ไม่ได้หมายความว่าต้องมีเก็บไว้ทั้งหมดที่ client ครับ
ton1
July 19, 2008, 6:44pm
35
ที่ผมแนะนำ Dell R200, Dell R300 เพราะผมวิเคราะห์จากงานครับ
หลาย ๆ ท่านบอกให้เอา Dell 2950 ผมไม่เถียงเรื่อง เครื่องแรงกว่า
ใส่ HD ได้เยอะกว่า แต่บางอย่าง มันไม่จำเป็นนี่ครับ …
พวก DB ไม่ได้ใช้ พท.ในการเก็บเยอะอย่างที่คิดกันนะครับ อย่างเก่งไม่เกิน 10 GB
ผมดูระบบ web ใหญ่ ๆ อันดับต้น ๆ ของประเทศ ที่มีการ query มหาศาล
DB ก็ยังไม่ถึง 5 GB เลยครับ ถ้าจะเอาให้เร็ว ใช้ disk ที่เป็น solid state ครับ
ราคาแพง แต่ทำงานได้เร็วกว่ามาก …
ผมถึงเลือก Dell ตัวเล็ก ๆ 1 U พอครับ ถ้ารับไม่ไหว ก็ซื้อเครื่องเพิ่ม
ทำ replicate กันเอา แยก Read/Write อย่างชัดเจน กระจาย load
หลักการออกแบบระบบใหญ่ ๆ ต้องมีการกระจาย load ไม่ใช่รวม load
ถ้าทำ replicate แล้วยังไม่ไหว ก็ยังมีวิธีอื่นอีกครับ ถ้าสนใจ ยินดีให้คำปรึกษาครับ
ลืมตรงนี้ไปกันหรือเปล่าครับ “ห้ามล่ม 100%” ไม่มีในโลกครับ
99.999…% อันนี้พอได้
ใช้หลายเครื่อง เพื่อลดโอกาสการ down กระจายความเสี่ยงไป
ต้องมี cluster แน่นอนครับ แต่จะตรงจุดไหน ดูงบ และ ความสำคัญ
ขอบคุณทุกคำแนะนำนะครับ เรื่องserverตอนนี้ผมส่งspecและราคาโดยประมาณไปให้headแล้ว
ต้องรอดูfeed backจากข้างบนครับ
ส่วนเรื่องการพัฒนาappผมก็ต้องมาtuneใหม่อีกครับ ในเรื่องcacheและเรื่องset indexให้tableครับ
มีอะไรแนะนำผมอีกช่วยบอกด้วยนะครับ…