[SOLVED] Cloud Computing Lab 4

30.00 $

Programming resource
Digital learning resource
Category:
Practical programming resource
Suitable for guided study and reference
Tutor guidance available when needed

Description

5/5 - (1 vote)

1. Overview
在 Lab 2 ä¸ï¼Œæˆ‘们完æˆäº†ä¸€ä¸ªç®€åŒ–çš„ HTTP/1.1 Web æœåŠ¡å™¨ï¼› 在 Lab 3 ä¸ï¼Œæˆ‘们完æˆäº†ä¸€ä¸ªç®€åŒ–çš„ åˆ†å¸ƒå¼æ•°æ®åº“系统。 现在让我们å°è¯•将两者组åˆå¹¶å®Œå–„,构建一个高性能的分布å¼é€‰è¯¾ç³»ç»Ÿã€‚ æˆ‘ä»¬çš„ç›®æ ‡ï¼š
è¿ç”¨è¯¾ç¨‹çŸ¥è¯†ä¸Žè¿‡åŽ»çš„å®žéªŒé¡¹ç›®ï¼Œæž„å»ºä¸€ä¸ªåˆ†å¸ƒå¼é€‰è¯¾ç³»ç»Ÿ å¦ä¹ 如何æé«˜ä¸€ä¸ªç³»ç»Ÿçš„å¥å£®æ€§å’Œå¯æ‰©å±•性,尽å¯èƒ½æå‡å…¶æ€§èƒ½
注æ„ï¼šå¦‚æžœä½ é€‰æ‹©å®Œæˆ Lab 4,那么将ä¸å†éœ€è¦å®Œæˆ Lab 3ï¼Œå› ä¸º Lab 4 å·²ç»æ¶µç›–了 Lab 3 çš„è¦æ±‚ï¼Œå…¶ä¸æ•°æ®åº“æ–¹é¢çš„è¦æ±‚,请查看Lab3ï¼Œæˆ‘ä»¬ä¼šæ ¹æ®ä½ çš„ Lab 4 å®Œæˆæƒ…况对 Lab 3 进行打分。

2. Background
ä½ æ‰€éœ€è¦çš„æœ‰å…³ Http Server 与 Distributed Database 的基础知识都在过去的实验ä¸ï¼Œå¦‚æžœä½ å¿˜è®°äº†æˆ–è€… 想è¦å¤ä¹ ,å¯ä»¥é‡æ–°æŸ¥çœ‹Â Lab 2 和 Lab 。 Dividing databases
éšç€è¿‘些年信æ¯åŒ–大å‘展,越æ¥è¶Šå¤šçš„æ•°æ®å˜å…¥äº†æ•°æ®åº“ä¸ï¼Œè€Œç‰©ç†æœåŠ¡å™¨çš„CPUã€å†…å˜ã€å˜å‚¨ã€è¿žæŽ¥æ•°ç‰èµ„æºæ˜¯æœ‰é™çš„,æŸä¸ªæ—¶æ®µå¤§é‡è¿žæŽ¥åŒæ—¶æ‰§è¡Œæ“ä½œï¼Œä¼šå¯¼è‡ ´æ•°æ®åº“在处ç†ä¸Šé‡åˆ°æ€§èƒ½ç“¶é¢ˆã€‚为了解决这个问题,行业先驱门充
åˆ†å‘æ‰¬äº†åˆ†è€Œæ²»ä¹‹çš„æ€æƒ³ï¼Œå¯¹å¤§è¡¨è¿›è¡Œåˆ†å‰²ï¼Œç„¶åŽå®žæ–½æ›´å¥½çš„æŽ§åˆ¶å’Œç®¡ç†ï¼ŒåŒæ—
¶ä½¿ç”¨å¤šå°æœºå™¨çš„CPUã€å†…å˜ã€å˜å‚¨ï¼Œæä¾›æ›´å¥½çš„æ€§èƒ½ã€‚
å…¶ä¸ä¸€ç§ç®€å•的逻辑分割是垂直分库。比如我们的数æ®åº“ä¸‐
有商å“表Productsã€è¿˜æœ‰å¯¹è®¢å•表Orders,还有积分表Scoresã€‚æŽ¥ä¸‹æ¥æˆ‘们就å¯ä»¥åˆ›å»ºä¸‰ä¸ªæ•°æ®åº“,一个数æ®åº“å‐
˜æ”¾å•†å“,一个数æ®åº“å˜æ”¾è®¢å•,一个数æ®åº“å˜æ”¾ç§¯åˆ†ã€‚如下图所示:

è¿™æ ·åšæœ‰ä»¥ä¸‹å‡ 个优点:
è·Ÿéšä¸šåŠ¡è¿›è¡Œåˆ†å‰²ï¼Œå’Œæœ€è¿‘æµè¡Œçš„å¾®æœåŠ¡æ¦‚å¿µç›¸ä¼¼ï¼Œæ–¹ä¾¿è§£è€¦ä¹‹åŽçš„管ç†åŠæ‰©å±•。 高并å‘çš„åœºæ™¯ä¸‹ï¼Œåž‚ç›´æ‹†åˆ†ä½¿ç”¨å¤šå°æœåŠ¡å™¨çš„CPUã€I/Oã€å†…å˜èƒ½æå‡æ€§èƒ½ï¼ŒåŒæ—
¶å¯¹å•机数æ®åº“连接数ã€ä¸€äº›èµ„æºé™åˆ¶ä¹Ÿå¾—到了æå‡ã€‚ èƒ½å®žçŽ°å†·çƒæ•°æ®çš„分离。
å½“ç„¶ï¼Œåˆ†åº“åˆ†è¡¨åœ¨å®žé™…åº”ç”¨ä¸æ˜¯ä¸€ä¸ªååˆ†å¤æ‚的设计,在低并å‘的应用程åºä¸‐
ï¼Œåˆ†åº“åˆ†è¡¨çš„æ•ˆæžœå¹¶ä¸æ˜Žæ˜¾ï¼Œå› æ¤éœ€è¦æ ¹æ®ä¸šåŠ¡éœ€æ±‚ï¼Œå¹¶å‘æ‰¿è½½èƒ½åŠ›ç‰ç»¼åˆè€ƒè™‘。为了简化 这一过程,在实验ä¸ï¼Œæˆ‘ä»¬ä»…è¦æ±‚对数æ®è¿›è¡Œåž‚直分库,å³å°†è¯¾ç¨‹æ•°æ®å’Œå¦ç”Ÿä¿¡æ¯åˆ†åˆ«å˜å‚¨åˆ°ä¸åŒçš„节点ä¸ï¼Œä»¥æ¤æ¥å®žçŽ°è¯¾ç¨‹æ•°æ®è®¿é—®å’Œå¦ç”Ÿä¿¡æ¯è®¿é—®äº’ä¸å½±å“的效果。 Load Balancing
负载平衡(英è¯ï¼šload balancing)是一ç§ç”µå计算机技术,用æ¥åœ¨å¤šä¸ªè®¡ç®—机(计算
机集群)ã€ç½‘络连接ã€CPUã€ç£ç›˜é©±åŠ¨å™¨æˆ–å…¶ä»–èµ„æºä¸åˆ†é…负载,以达到优化资æºä½¿ç”¨ã€æœ€å¤§åŒ– åžåçŽ‡ã€æœ€å°åŒ–å“应时间ã€åŒæ—¶é¿å…过载的目的。 使用带有负载平衡的多个æœåŠ¡å™¨ç»„ä»¶ï¼Œå– ä»£å•一的组件,å¯ä»¥é€šè¿‡å†—ä½™æé«˜å¯é 性。负载平衡æœåŠ¡é€šå¸¸æ˜¯ç”±ä¸“ç”¨è½¯ä»¶å’Œç¡¬ä»¶æ¥å®Œæˆã€‚
主è¦ä½œç”¨æ˜¯å°†å¤§é‡ä½œä¸šåˆç†åœ°åˆ†æ‘Šåˆ°å¤šä¸ªæ“作å•元上进行执行,用于解决互è”网架构ä¸çš„高并å‘和高å¯ç”¨çš„é
—®é¢˜ã€‚
è´Ÿè½½å‡è¡¡æœ€é‡è¦çš„ä¸€ä¸ªåº”ç”¨æ˜¯åˆ©ç”¨å¤šå°æœåС噍æä¾›å•一æœåŠ¡ï¼Œå¯¹äºŽäº’è”网æœåŠ¡ï¼Œè
´Ÿè½½å¹³è¡¡å™¨é€šå¸¸æ˜¯ä¸€ä¸ªè½¯ä»¶ç¨‹åºï¼Œè¿™ä¸ªç¨‹åºä¾¦å¬ä¸€ä¸ªå¤–部端å£ï¼Œäº’è”网用户å¯ä»¥é€šè¿‡è¿™ä¸ªç«¯å£æ¥è®¿é—
®æœåŠ¡ï¼Œè€Œä½œä¸ºè´Ÿè½½å¹³è¡¡å™¨çš„è½¯ä»¶ä¼šå°†ç”¨æˆ·çš„è¯·æ±‚è½¬å‘ç»™åŽå°å†…网æœåŠ¡å™¨ï¼Œå†…
网æœåŠ¡å™¨å°†è¯·æ±‚çš„å“应返回给负载平衡器,负载平衡器å†å°†å“应å‘é€åˆ°ç”¨æˆ·ï¼Œè¿™æ ·å°±å‘互è”网用户éšè—了内 网结构,阻æ¢äº†ç”¨æˆ·ç›´æŽ¥è®¿é—®åŽå°ï¼ˆå†…网)æœåŠ¡å™¨ï¼Œä½¿å¾—æœåŠ¡å™¨æ›´åŠ å®‰å…¨ï¼Œå¯ä»¥é˜»æ‐
¢å¯¹æ ¸å¿ƒç½‘ç»œæ ˆå’Œè¿è¡Œåœ¨å…¶å®ƒç«¯å£æœåŠ¡çš„æ”»å‡»ã€‚
当所有åŽå°æœåŠ¡å™¨å‡ºçŽ°æ•…éšœæ—¶ï¼Œæœ‰äº›è´Ÿè½½å¹³è¡¡å™¨ä¼šæä¾›ä¸€äº›ç‰¹æ®Šçš„功能æ¥å¤„ç†è¿™ç§æƒ… 况。例如转å‘è¯·æ±‚åˆ°ä¸€ä¸ªå¤‡ç”¨çš„è´Ÿè½½å¹³è¡¡å™¨ã€æ˜¾ç¤ºä¸€æ¡å…³äºŽæœåС䏿–的消æ¯ç‰ã€‚负载平衡器使得 IT团队å¯ä»¥æ˜¾è‘—æé«˜å®¹é”™èƒ½åŠ›ã€‚å®ƒå¯ä»¥è‡ªåЍæä¾›å¤§é‡çš„容é‡ä»¥å¤„ç†ä»»ä½•åº”ç”¨ç¨‹åºæµé‡çš„å¢žåŠ æˆ–å‡å°‘。 为了更好的实现负载å‡è¡¡å™¨ï¼Œä½ å¯èƒ½éœ€è¦é€‰æ‹©ä¸€ç§æˆ–å‡ ç§åˆé€‚的调度算法。
Basic Version

在 basic 版本ä¸ï¼Œä½ åªéœ€è¦è¿è¡Œä¸€ä¸ª Web æœåŠ¡å™¨ï¼Œä¸Žå…¶ç›¸è¿žçš„æ˜¯å¤šä¸ªå˜å‚¨å™¨é›†ç¾¤ã€‚ 对于WebæœåŠ¡å™¨ï¼Œæˆ‘ä»¬è¦æ±‚:支æŒé«˜å¹¶å‘,å¯ä»¥åŒæ—¶å“应多个客户端å‘é€çš„请求。 对于å˜å‚¨å™¨é›†ç¾¤ï¼Œæˆ‘ä»¬è¦æ±‚:集群数é‡ä¸å°äºŽ2,å•个集群之间的通信å¯ä»¥ä½¿ç”¨ 2PC 或 RAFT å议实现。
当å˜å‚¨å™¨é›†ç¾¤æ•°é‡å¢žå¤šæ—¶ï¼Œä½ å¯ä»¥å¯¹å˜å‚¨çš„æ•°æ®è¿›è¡Œåˆ†åº“å˜å‚¨ï¼Œå¦‚课程ä¸çš„æ•°æ®å¯ä»¥å˜å‚¨åœ¨ Cluster 1 ä¸ï¼Œè€Œå¦ç”Ÿä¸ªäººä¿¡æ¯ç›¸å…³çš„æ•°æ®å¯ä»¥å˜å‚¨åœ¨ Cluster 2 ä¸ã€‚ Advanced Version

在advance版本ä¸ï¼Œä½ 需è¦è¿è¡Œä¸€ä¸ªè´Ÿè½½å‡è¡¡å™¨ï¼Œå¤šä¸ªWebæœåС噍以åŠå¤šä¸ªå˜å‚¨å™¨é›†ç¾¤ã€‚
对于负载å‡è¡¡å™¨ï¼Œæˆ‘ä»¬è¦æ±‚:支æŒé«˜å¹¶å‘,能够动æ€åœ°é€‰æ‹©æ
´»è·ƒå¹¶ä¸”å¯ç”¨çš„WebæœåŠ¡å™¨ï¼Œå°†è¯·æ±‚å‘é€è‡³ç›¸åº”节点进行处ç†ã€‚ 对于WebæœåŠ¡å™¨å’Œå˜å‚¨å™¨é›†ç¾¤ï¼Œæˆ‘ä»¬è¦æ±‚ç‰åŒäºŽBasic版本。
4. Standardized Format
为了更好的进行测试与评阅,我们将对实验过程ä¸çš„ä¸€äº›æ•°æ®æ ¼å¼è¿›è¡Œæ ‡å‡†è§„定,请确ä¿ä½ 实现的最终系统在这些对外接å£ä¸Šæ˜¯æˆ‘ä»¬çš„æ ‡å‡†ä¸€è‡´çš„ã€‚
在请求体和å“应体ä¸ï¼Œæˆ‘们采用JSONæ ¼å¼è¿›è¡Œé€šä¿¡ã€‚è¯·æ±‚ä½“æ ¹æ®è¯·æ±‚内容决定,而å“应体包 å«äº†ç‰¹å®šçš„æ•°æ®ç»“构,分别为code,dataå’Œmsg。其ä¸code表示状æ€ç ,200为æ£å¸¸å“应,其他 为错误å“应,å¯ä»¥æ ¹æ®å®žé™…情况返回ä¸åŒçš„éžé›¶å€¼ã€‚data表示å“应对象,里é¢åŒ…å«å“应结果,错误情 况下为空。msg表示å“应消æ¯ï¼Œæ£å¸¸æƒ…况下一般为okï¼Œé”™è¯¯æƒ…å†µä¸‹æ ¹æ®å®žé™…值返回错误消æ¯ã€‚
除了特定的 api 之外,Web æœåС噍ä»éœ€è¦æ”¯æŒé™æ€æ–‡ä»¶è®¿é—®ç‰åŸºæœ¬åŠŸèƒ½ï¼ˆå¦‚æ”¯æŒæ˜¾ç¤º html 页é¢ï¼Œéžæ³• path 返回 404 页é¢ç‰ï¼‰ï¼Œåœ¨æ¤ç•¥å޻介ç»ï¼Œå…·ä½“ä¿¡æ¯å¯å‚考 Lab 2。
我们对 api 的设计进行了éžå¸¸å¤šçš„简化,现实ä¸å°†ä¼šè¿œæ¯”å®ƒä»¬å¤æ‚ï¼Œä½ å¯ä»¥ä½¿ç”¨è¦æ±‚以外的 path æ‰©å±•ä½ çš„ç³»ç»Ÿï¼Œå¦‚ï¼šä½ å¯ä»¥è‡ªè¡Œè®¾è®¡æŠ¥é”™ä¿¡æ¯ã€‚
4.1 Web Server
一个完整的选课系统需è¦åŒ…å«ä¼—多功能,为了é™ä½Žå¤æ‚性,我们将其抽象为查询课程,选ä¸è¯¾ç¨‹å’Œé€€é€‰è¯¾ç¨‹è¿™å‡ 个模å—。
1. /api/search/course
介ç»ï¼šä¸»è¦ç”¨äºŽæŸ¥è¯¢è¯¾ç¨‹ä¿¡æ¯ï¼Œç›¸å…³çš„傿•°ä½¿ç”¨Â query æºå¸¦ï¼ŒæŸ¥è¯¢åŽç»™å‡ºçš„æ•°æ®è‡³å°‘需è¦åŒ… å«è¯¾ç¨‹çš„ ç¼–å·ï¼Œå称,容é‡å’Œå·²é€‰äººæ•°ã€‚ 方法:GET
傿•°ï¼šid=[course_id] 课程编å·ä»…由 [a-zA-Z0-9]组æˆï¼Œä¸å«æœ‰ç‰¹æ®Šå—符。 å“应体:
json { “code”: 200, “data”: { “id”: course_id, // 课程id “name”: course_name , // 课程 “capacity”: capacity , // è¯¾ç¨‹å®¹é‡ “selected”: selected // 已选人数 }, “msg”: “ok” }
1. /api/search/all
介ç»ï¼šä¸ŽæŸ¥è¯¢å•个课程类似,但其 dataå—æ®µçš„值从å•个课程信æ¯å˜ä¸ºäº†åŒ… 嫿‰€æœ‰è¯¾ç¨‹ä¿¡æ¯çš„æ•°ç»„。 方法:GET
å“应体:
json { “code”: 200, “data”: [{ “id”: course_id, // 课程id “name”: course_name , // 课程 “capacity”: capacity
, // è¯¾ç¨‹å®¹é‡ “selected”: selected // 已选人数 },{ “id”: course_id, “name”: course_name , // 课程 “capacity”: capacity , // è¯¾ç¨‹å®¹é‡ “selected”: selected // 已选人数 }, … ], “msg”: “ok” }
1. /api/search/student 介ç»ï¼šä¸»è¦ç”¨äºŽæŸ¥è¯¢å¦ç”Ÿæ‰€é€‰è¯¾ç¨‹ä¿¡æ¯ï¼Œç›¸å…³çš„傿•°ä½¿ç”¨Â query æºå¸¦ 方法:GET
傿•°ï¼šstuid=[student_id] å¦ç”Ÿå¦å·ä»…由 [a-zA-Z0-9]组æˆï¼Œä¸å«æœ‰ç‰¹æ®Šå—符。 å“应体:
json { “code”: 200, “data”: { “stuid”: student_id, // å¦å· “name”: student_name , // å¦ç”Ÿå§“å “course”: [{ // å‐
¦ç”Ÿé€‰çš„课程数组 “id”: course_id, “name”: course_name , // 课程 },{ “id”: course_id, “name”: course_name
, // 课程 }, … ] }, “msg”: “ok” } 如果å¦ç”Ÿæœªé€‰è¯¾ç¨‹ï¼ŒÂ data.course = []å³å¯ã€‚
1. /api/choose 介ç»ï¼šä¸»è¦ç”¨äºŽè¿›è¡Œé€‰è¯¾æ“ä½œï¼Œç›¸å…³çš„å‚æ•°ä½¿ç”¨Â http request bodyæºå¸¦ 方法:POST 请求体: json { “stuid”: student_id, // å¦ç”Ÿå¦å· “course_id”: course_id // è¯¾ç¨‹ç¼–å· } 当需è¦è¿›è¡Œé€‰è¯¾æ“作时,payloadÂ åº”è‡³å°‘åŒ…å« å¦ç”Ÿå¦å·ï¼Œè¯¾ç¨‹ç¼–å·ã€‚ å“应体: json { “code”: 200, “data”: [], “msg”: “ok” } 对于 payload æ ¼å¼æˆ–æ•°æ®éžæ³•ï¼Œæ— æ³•æŸ¥è¯¢åˆ°ç›¸å…³ä¿¡æ¯ï¼Œè¯¾ç¨‹å·²æ»¡ ç‰é”™è¯¯æƒ… 况,返回包å«é”™è¯¯ä¿¡æ¯çš„ JSON 对象å³å¯ã€‚
1. /api/drop 介ç»ï¼šä¸»è¦ç”¨äºŽè¿›è¡Œé€€é€‰æ“ä½œï¼Œç›¸å…³çš„å‚æ•°ä½¿ç”¨Â http request bodyæºå¸¦ 方法:POST 请求体: json { “stuid”: student_id, // å¦ç”Ÿå¦å· “course_id”: course_id // è¯¾ç¨‹ç¼–å· } 当需è¦è¿›è¡Œé€‰è¯¾æ“作时,payloadÂ åº”è‡³å°‘åŒ…å« å¦ç”Ÿå¦å·ï¼Œè¯¾ç¨‹ç¼–å·ã€‚ å“应体: json { “code”: 200, “data”: [], “msg”: “ok” } 对于 payload æ ¼å¼æˆ–æ•°æ®éžæ³•ï¼Œæ— æ³•æŸ¥è¯¢åˆ°ç›¸å…³ä¿¡æ¯ï¼Œè¯¥å¦ç”Ÿæ²¡æœ‰é€‰æ‹©è¿™é—¨è¯¾ç‰é”™è¯¯æƒ…况,返回包å«é”™è¯¯ä¿¡æ¯çš„ JSON 对象å³å¯ã€‚
4.2 Store Server
Command Lines Arguments
由于我们系统使用了默认数æ®ï¼Œæ‰€ä»¥ä½ çš„å˜å‚¨å™¨åº”该在å¯åŠ¨æ—¶ï¼Œå¯¹è¿™äº›æ•°æ®è¿›è¡Œè¯»å–。 默认数æ®å¯ä»¥åœ¨Â data/Â æ–‡ä»¶å¤¹ä¸æ‰¾åˆ°ã€‚ 其余说明请å‚考 Lab 3。 Database Tables
æ•°æ®åº“çš„åŸºç¡€æ ¼å¼æ˜¯å…³ç³»åž‹æ•°æ®åº“ï¼Œä½ ä¹Ÿå¯ä»¥æ ¹æ®éœ€è¦å¢žæ·»ä¿®æ”¹æ•°æ®çš„类型,也å¯ä»¥é€‰æ‹©è®¾è®¡æ– °ç±»åž‹çš„æ•°æ®åº“,但必须ä¿è¯é€šè¿‡æ•°æ®åº“å¯ä»¥æ£å¸¸å®Œæˆéœ€è¦çš„功能。 默认数æ®å¯ä»¥åœ¨Â data/Â æ–‡ä»¶å¤¹ä¸æ‰¾åˆ°ã€‚
Course
| id(key) – string | name – string | capacity – int | selected – int | | — | — | — | — | | “CS06142” | “云计算技术” | 120 | 120 |
Student
| id(key) – string | name – string | | — | — | | “211926010111” | “å¼ ä¸‰” |
Course Selection
| Course id – string | Student id – string | | — | — | | “CS06142” | “211926010111” |
Commands
æ£å¸¸æƒ…况下,用户访问数æ®ä»…通过å‰ç«¯çš„ HTTP Web æœåŠ¡å™¨ï¼Œè€Œæ•°æ®æŸ¥è¯¢ç”± Web æœåŠ¡å™¨ä¸Žæ•°æ®åº“集群进行交互。 以下给出的数æ®åº“命令仅供å‚è€ƒï¼Œä½ å¯ä»¥é€‰æ‹©è‡ªå·±å®žçŽ°ä¸€ä¸ªæ»¡è¶³ç›¸åŒåŸºæœ¬åŠŸèƒ½çš„å‘½ä»¤é›†ã€‚ Check Courses Capacity
å‘é€Â GET Course [course id], e.g., GET Course CS06142ï¼› 返回 [course id] [course name] [course capacity] [selected number], e.g., CS06142 云计算技术 120 120 特别的,å¯ä»¥ä¸€æ¬¡æŸ¥è¯¢æ‰€æœ‰çš„课程最大容é‡ä¿¡æ¯:
å‘é€Â GET Course all, e.g., GET Course allï¼›
返回 多行 [course id] [course name] [course capacity] [selected number], e.g., CS04008 计算机网络 90 80 CS06142 云计算技术 120 120。
Check Student Selected Courses å‘é€Â GET Student Courses [student id], e.g., GET Student Courses 211926010111ï¼› 返回 多行 [course id] [course name], e.g., CS04008 计算机网络 CS06142 云计算技术。 Choose a Course
å‘é€Â ADD Student Course [student id] [course id], e.g., ADD Student Course 211926010111 CS06142ï¼› 如果æˆåŠŸï¼Œè¿”å›žÂ +OK; 如果失败,返回 -ERROR。 Drop a Course
å‘é€Â DEL Student Course [student id] [course id], e.g., DEL Student Course 211926010111 CS06142ï¼› 如果æˆåŠŸï¼Œè¿”å›žÂ +OK; 如果失败,返回 -ERROR。
4.3 Load Balancer
为了更好地统一测试,我们需è¦ä½ 的负载å‡è¡¡å™¨é‡‡ç”¨æ ‡å‡†çš„é…ç½®æ–
‡ä»¶å¯åŠ¨ï¼Œä¾‹å¦‚ï¼Œä½ å¯ä»¥è¿™æ ·å°†æ‰€æœ‰çš„WebæœåŠ¡çš„åœ°å€å’Œç«¯å£ä¼ 给负载å‡è¡¡å™¨ï¼Œç”±è ´Ÿè½½å‡è¡¡å™¨åЍæ€çš„转å‘请求到这些WebæœåŠ¡ä¸Šï¼š
“`
web_servers.conf æ¯ä¸€è¡Œéƒ½æ˜¯ä¸€ä¸ªå†… 部webæœåŠ¡è¿›ç¨‹çš„ç›‘å¬åœ°å€å’Œç«¯å£
127.0.0.1 8081 127.0.0.1 8082 127.0.0.1 8083 127.0.0.1 8084 “`
5. Test
默认情况下,我们将在 Linux Ubuntu 20.04 x64 æœåŠ¡å™¨è¿›è¡Œæµ‹è¯•ã€‚ 我们预期的测试和评分项目有:
API功能实现:上述æ¯ä¸ªAPIå‡ä¸º1分(5分)
å˜å‚¨èŠ‚ç‚¹å®¹ç¾æµ‹è¯•ï¼šéšæœºç»ˆæ¢å˜å‚¨èŠ‚ç‚¹æœåŠ¡ï¼ŒæŽ¥å£è¿è¡Œæƒ…况(3分)
è´Ÿè½½å‡è¡¡å®žçŽ°ï¼šé€šè¿‡è´Ÿè½½å‡è¡¡å™¨å¯¹å¤–æä¾›æŽ¥å£æœåŠ¡ï¼Œå¹¶ä¸”WebæœåŠ¡èƒ½å¤Ÿå®¹ç¾ï¼ˆ1分) 性能测试:在高并å‘下ã€åЍæ€åˆ‡æ¢çš„æƒ…å†µä¸‹ï¼Œç³»ç»Ÿçš„æ‰¿è½½èƒ½åŠ›ï¼Œæ ¹æ®æ‰€æœ‰å°ç»„的测试情 况进行内部评比得分(1分) ä¸ºäº†æ ‡å‡†åŒ–æµ‹è¯•ï¼Œä½ çš„ç³»ç»Ÿåœ¨è¿è¡Œä¸Šï¼Œéœ€è¦æ»¡è¶³ä¸€ä¸‹æ¡ä»¶ï¼š
1. æ³¨æ„æ–‡ä»¶ç»“构,ä¸åŒæ¨¡å—æºä»£ç 处于ä¸åŒæ–‡ä»¶å¤¹ä¸ï¼ˆæˆ‘ä»¬ä¼šæ£€æŸ¥ä½ çš„æºä»£ç )
2. é¡¹ç›®çš„æ ¹ç›®å½•ä¸‹å¯ä»¥ä½¿ç”¨Â make 命令直接编译所有模å—
3. 坿‰§è¡Œæ–‡ä»¶åˆ†ä¸º Web æœåС噍 å’Œ å˜å‚¨å™¨é›†ç¾¤ä¸¤ä¸ªéƒ¨åˆ†ï¼Œå…¶ä¸
Web æœåС噍坿‰§è¡Œæ–‡ä»¶ä¸ºÂ web-server,支æŒÂ -ip, -port, -config_path ç‰å‘½ä»¤è¡Œå‚数,例如./web-
server –ip 127.0.0.1 –port 8080 –config_path ./conf/store_servers.conf å˜å‚¨å™¨ 坿‰§è¡Œæ–‡ä»¶ä¸ºÂ store-server,支æŒÂ -config_path ç‰å‘½ä»¤è¡Œå‚数,并使用é…ç½®æ–
‡ä»¶Â coordinator.conf 或 participant.conf 进行é…置,具体细节请查看Lab3。测试ä¸ï¼Œæ¯ä¸ªé›†ç¾¤çš„å˜å‚¨æœåŠ¡å™¨æ•°é‡ä¸º 4,2pcå’Œraft任选一ç§å®žçŽ°ï¼Œä¾‹å¦‚ï¼š
“`
å¯åЍå˜å‚¨æœåŠ¡å™¨é›†ç¾¤1(该集群主è¦å˜å‚¨ å¦ç”Ÿ-选课 æ•°æ®ï¼‰ – 2pc
$ ./store-server –config_path ./conf/coordinator1.conf $ ./store-server –config_path ./conf/participant101.conf $ ./store-server –config_path
./conf/participant102.conf $ ./store-server –config_path ./conf/participant103.conf
å¯åЍå˜å‚¨æœåŠ¡å™¨é›†ç¾¤2(该集群主è¦å˜å‚¨ 课程选课人数 æ•°æ®ï¼‰ – raft
$ ./store-server –config_path ./conf/store201.conf $ ./store-server –config_path ./conf/store202.conf $ ./store-server –config_path ./conf/store203.conf $
./store-server –config_path ./conf/store204.conf “`
å¦‚æžœä½ å®žçŽ°äº†Â Load Balancerï¼Œå…¶å¯æ‰§è¡Œæ–‡ä»¶è¯·å‘½å为 load-balancer,支æŒÂ -ip –port -web_config_path -store_config_path  ç‰å‘½ä»¤è¡Œå‚数。例如
“`
å¯åŠ¨è´Ÿè½½å‡è¡¡å™¨
$ ./load-balancer –ip 127.0.0.1 –port 8080 –store_config_path ./conf/store_servers.conf –web_config_path ./conf/web_servers.conf
å¯åЍwebæœåŠ¡å™¨é›†ç¾¤
$ ./web-server01 –ip 127.0.0.1 –port 8081 –config_path ./conf/store_servers.conf $ ./web-server02 –ip 127.0.0.1 –port 8082 –config_path
./conf/store_servers.conf $ ./web-server02 –ip 127.0.0.1 –port 8083 –config_path ./conf/store_servers.conf $ ./web-server02 –ip 127.0.0.1 –port 8084
–config_path ./conf/store_servers.conf “` 坿‰§è¡Œæ–‡ä»¶ä¸Žé…ç½®æ–‡ä»¶çš„è¦æ±‚å¯ä»¥å‚考 Lab2, Lab 3。
4.æ¯æ¬¡è¿è¡Œç³»ç»Ÿï¼Œéƒ½å°†å…ˆå¯åŠ¨å¤šä¸ªå˜å‚¨å™¨é›†ç¾¤ä¸çš„æ¯ä¸ªå˜å‚¨æœåŠ¡å™¨ï¼ŒéšåŽå¯åŠ¨å¤šä¸ª Web æœåŠ¡å™¨ï¼Œæœ€åŽå†å¯åЍ Load Balancer(如果需è¦ï¼‰ï¼Œè¯·ä¿è¯æ¯ä¸ªå¯æ‰§è¡Œæ–‡ä»¶éƒ½èƒ½æ£å¸¸è¿è¡Œã€‚ 类似之å‰çš„实验,我们æä¾›äº†æµ‹è¯•程åºï¼Œè¯·ä»”细阅读 Lab 4 å®žéªŒæ–‡æ¡£å’Œæµ‹è¯•ç¨‹åºæ–‡æ¡£åŽä½¿ç”¨ã€‚

6. Lab submission
å°†ä½ çš„ä»£ç æäº¤åˆ°Â /Lab4/ 文件夹,并编写 Makefile 确ä¿å¯ä»¥ç›´æŽ¥ä½¿ç”¨Â make 命令编 译所有需è¦çš„坿‰§è¡Œæ–‡ä»¶ã€‚
考虑到 Lab 4Â å®žçŽ°å®Œæ•´ç³»ç»Ÿè¾ƒä¸ºå¤æ‚,验收å¯èƒ½ä¼šå˜åœ¨é¢å¤–问题,请在æäº¤ä»£ç çš„åŒæ—¶ï¼Œç¼– 写一份 intro.mdÂ ï¼Œå¹¶æ·»åŠ ä¸€äº›è¯´æ˜Žï¼Œå¦‚ï¼šå¦‚ä½•ç¼–è¯‘ï¼Œå¦‚ä½•è¿è¡Œä½ 的程åºï¼›æ˜¯å¦è¿ç”¨äº†å…¶ä»–ä¾èµ– 库,如何安装ä¾èµ–ï¼›å¦‚ä½•ç®¡ç†æ•°æ®åº“,实现数æ®åˆ†å—ç‰ã€‚

7. Grading standards
å®Œæˆæ‰€æœ‰ Basic ç‰ˆæœ¬çš„è¦æ±‚ï¼Œä½ å°†èŽ·å¾— 8 分; å®Œæˆæ‰€æœ‰ Advanced ç‰ˆæœ¬çš„è¦æ±‚ï¼Œä½ å°†èŽ·å¾— 10 分。 å¦‚æžœä½ æœ‰éƒ¨åˆ†åŠŸèƒ½æ²¡æœ‰å®žçŽ°ï¼Œå°†æ ¹æ®ä½ çš„å®Œæˆæƒ…况进行细化打分。 æ¤åˆ†æ•°ä¸åŒ…å« Lab 3,Lab 3 çš„åˆ†æ•°ä¼šæ ¹æ® Lab 4 å®Œæˆæƒ…况å¦å¤–获得。

Resource details

Understand the Task Before You Use the Resource

Review the requirements, identify the programming concepts involved, study the implementation and test your understanding with your own examples and modifications.