Giӟi thiӋXÿӅ WjL Nhұn thҩy rҵng nӅn tҧng chia sҿ nhҥFQj\UҩWWK~Yӏ YjFyWtQKODQWӓD.KyDluұQQj\Kѭӟng tӟi viӋc tҥo ra mӝt ӭng dөng vӟLFiFWtQKQăQJFѫEҧn, vӯDÿӫ QKѭQJYүQÿiSӭQJÿѭӧc hҫu hӃWFiFQKXF
Trang 1GVHD: ThҥFVƭ1JX\ӉQĈuQK7KjQK GVPB: ThҥFVƭ1JX\ӉQ7KDQK7QJ
-GF -
697+/r9ăQ7KL
Trang 32
ѴI HҊC QUҌC GIA TP.HCM CҐE',Ly,ҐI CHҘ E',3A VI҇T NAM
- Ҿc lҨp - Tӌ do - HҢŶŚƉŚƷĐdZҙғE'ѴI HҊ,<,K
KHOA:<,Θ<dDĄLJƚşŶŚ _ NHIӊM VӨ LUҰ1È17ӔT NGHIӊP
BҐ DNE͗KHMT _ ŚƷlj͗^ŝŶŚǀŝġŶƉŚңŝĚĄŶƚӁ ŶăLJǀăŽƚƌĂŶŐŶŚҤt cӆa bңn thuyұƚƚƌŞŶŚ
HҊ sdE͗>ġsĉŶThi _MSSV: 1613289 E'E,͗,ҵ ThҺŶŐdŚƀŶŐdŝŶͺͺͺͺͺͺͺͺͺͺͺͺͺͺͺͺͺͺͺ>ҒP: _
1 ҥƵĜҲ luҨŶĄŶ͗
yąLJӌng Hҵ ThҺŶŐEŐŚĞsăŚŝĂ^ү NhҢc Online. _
2 Nhiҵm vӅ ;LJġƵĐҥu vҲ nҾŝĚƵŶŐǀăsҺ liҵƵďĂŶĜҥu):
yąLJĚӌng mҾt hҵ thҺng chia sү nhҢĐƚƌġŶŶҲn tңŶŐǁĞď͘ҺŝƚӇӄŶŐůăĐĄĐĨŝůĞĂƵĚŝŽ͕ĐſŚҽ trӄ WtĜҳ ƚĉŶŐƚƌңi nghiҵŵŶŐӇӁŝĚƶŶŐƚƌġŶŵŽďŝůĞ͘
Hҵ ThҺng sҰ tham khңo mҾt sҺ ƚşŶŚŶĉŶŐĐӆĂĐĄĐƚƌĂŶŐŶŐŚĞŶŚҢc trӌc tuyұŶŶŚӇNCT, Zing mp3, SpotŝĨLJ͕͙
Hҵ thҺŶŐĐŚŽƉŚĠƉŶŐӇӁŝĚƶŶŐŶŐŚĞǀăĐŚŝĂƐү nhӋng bңn nhҢc cӆa hҸ
Hҵ thҺŶŐĐſĐŚӈĐŶĉŶŐƚӇҿŶŐƚӌ zŽƵƚƵďĞŶŚӇůŝŬĞ͕ƐŚĂƌĞ͕ĐŽŵŵĞŶƚ͘
Hҵ thҺŶŐĐžŶĐſĐĄĐĐŚӈĐŶĉŶŐŶŚӇƚҢo playlist, bңng xұp hҢŶŐąŵŶŚҢĐ͕džƵŚӇӀng, ƉŚąŶůŽҢi nhҢĐƚŚĞŽĐĂƐš͕ĐŚӆ ĜҲ, quҺĐŐŝĂ͙
Giao diҵŶŶŐӇӁŝĚƶŶŐƚŚąŶƚŚŝҵn, dҴ sӊ dӅng, dҴ ůăŵƋƵĞŶǀӀŝŶŐӇӁi mӀi sӊ dӅng
Trang 4 ĈmWuPKLӇXYjiSGөng tӕWÿѭӧFFiFF{QJQJKӋ web frontend: ReactJS, NextJS,
backend: NodeJS, NestJS, database: MongoDB
KhӕLOѭӧQJF{QJYLӋc nhiӅXQKѭQJFyFӕ gҳQJÿӇ KRjQWKjQKOXұQYăQ
7 Nhӳng thiӃu VyWFKtQKFӫa LVTN:
PhҫQÿiQKJLiWHVWLQJKӋ thӕQJFzQVѫVjL
Giao diӋQZHEVLWHFKѭDÿiSӭQJWtQKUHVSRQVLYHFKRÿDWKLӃt bӏ
Nhӳng vҩQÿӅ bҧo mұt cho hӋ thӕQJFKѭDÿѭӧFFK~WUӑng
8 ĈӅ nghӏĈѭӧc bҧo vӋ Ŷ Bә VXQJWKrPÿӇ bҧo vӋ Ƒ K{QJÿѭӧc bҧo vӋ Ƒ
9 3 FkXKӓi SV phҧi trҧ lӡLWUѭӟc HӝLÿӗng:
10 ĈiQKJLiFKXQJEҵng chӳ: giӓLNKi7% giӓi ĈLӇm : 8.5/10
.êWrQJKLU}Kӑ WrQ
Trang 53 Hӑ WrQQJѭӡi phҧn biӋn: ThS NguyӉQ7KDQK7QJ
4 TәQJTXiWYӅ bҧn thuyӃt minh:
- 6LQKYLrQKLӋn thӵc hӋ thӕQJQJKHYjFKLDVҿ nhҥc online
- 1JѭӡLGQJFyWKӇ tҥRGDQKViFKEjLKiWQJKHQKҥFYjFKRSKpSWҧi nhҥFWUrQWUDQJZHE
- 1JѭӡLGQJFyWKӇ chia sҿ EjLKiWFKRQJѭӡLNKiFWUrQKӋ thӕng ChӭFQăQJWKHRG}LFKRSKpSQJѭӡLGQJWKҩ\ÿѭӧc nhӳQJEjLKiWÿѭӧFWKtFKEӣLQJѭӡLÿѭӧFWKHRG}L
Trang 76
LӠI CҦM Ѫ1
-GF - LӡLÿҫXWLrQHP[LQÿѭӧc gӱi lӡi cҧPѫQÿӃn giҧQJYLrQKѭӟng dүQOjthҫy NguyӉQĈuQK7KjQK ÿmWұQWuQKKѭӟng dүn, truyӅQÿҥt cho em nhӳng kiӃn thӭc, kinh nghiӋPTXêEiXFNJQJQKѭJL~Sÿӥ em tұQWuQKWURQJVXӕt thӡi gian thӵc hiӋQNKyDluұQQj\(P[LQNtQKFK~FWKҫy sӭc khӓe, hҥQKSK~FYjWKjQKF{QJWUrQFRQÿѭӡng
sӵ nghiӋp giҧng dҥy
(PFNJQJ[Ln gӱi lӡi cҧPѫQFKkQWKjQKÿӃQWUѭӡQJĈҥi hӑF%iFK.KRD
73+&0YjQKӳQJFiQEӝ giҧQYLrQÿһc biӋWOjFiFJLҧQYLrQNKRD.KRDKӑFPi\WtQKÿmWҥRÿLӅu kiӋQYjP{LWUѭӡng hӑc tұp tӕW*L~SHPFyFiFNLӃn thӭc nӅn tҧng tӕWÿӇ OjPQӅQPyQJWKӵc hiӋQNKyDOXұQQj\
6DXFQJHPFNJQJWUkQWUӑng cҧPѫQJLDÿuQKQJѭӡLWKkQEҥQEqÿmӫng hӝ,
hӛ trӧ YjJL~Sÿӥ em trong suӕt thӡi gian qua
7S+&0QJj\«WKiQJ«QăP
/r9ăQ7KL
Trang 8Nhұn thҩy rҵng 1 hӋ thӕQJFyWKӇ Fyÿҫ\ÿӫ WtQKQăQJFҧu tҩt cҧ nӅn tҧQJQKѭWUrQ(PÿmOrQêWKѭӣQJ[k\Gӵng 1 hӋ thӕQJQJKHYjFKLDVҿ nhҥFRQOLQH1ѫLOjVkQFKѫLFӫa tҩt cҧ mӑLQJѭӡi BҩWNuDLFNJQJFyWKӇ chia sҿ EjLKiWFӫDPuQK cho tҩt cҧ mӑLQJѭӡL9jKӋ thӕQJFyWKӇ FKRSKpSQJѭӡLGQJWѭѫQJWiFYӟLQKDXTXDFiFKuQKWKӭFQKѭOLNHFRPPHQWFKDW«1KѭOjPҥQJ[mKӝLÿtFKWKӵc HӋ thӕng FNJQJKӛ trӧ OѭXOҥLEjLKiWÿmXSORDGWҥRSOD\OLVW«1KѭOjӭng dөng nghe nhҥc
Trang 9KӃt quҧ PRQJÿӧi: HiӋn thӵFKyDPҥQJ[mKӝLkPQKҥc vӟLÿҫ\ÿӫ FiFWtQKQăQJ
FѫEҧn nhҩWQKѭQJKHQKҥc, tҧi nhҥc, upload nhҥFFRPPHQWOLNHWuPNLӃm, chat,
Trang 1110
MӨC LӨC
Ĉӄ &ѬѪ1*&+,7,ӂT 7
MӨC LӨC 10
DANH MӨ&+Î1+9Ӏ 13
DANH MӨC BҦNG 15
DANH MӨC TӮ VIӂT TҲT 9¬7+8ҰT NGӲ 16
7Ï07Ҳ7.+Ï$/8ҰN 18
&+ѬѪ1**,ӞI THIӊU 19
1.1 Mӣ ÿҫu 19
1.2 Giӟi thiӋXÿӅ WjL 19
1.3 Mөc tLrXFӫDÿӅ WjL 20
1.4 Phҥm vi tiӃp cұn cӫDÿӅ WjL 21
&+ѬѪ1*7Ә1*48$1Ĉӄ 7¬, 22
2.1 KhҧRViWWKӏ WUѭӡng 22
&iFQӅn tҧQJOLrQTXDQ 23
3KkQWtFKѭXQKѭӧFÿLӇPYjLQӅn tҧng 24
RDIO 24
DEEZER 24
8TRACK 25
SOUNDCLOUD 25
MYSPACE 26
GROOVESHARK 27
&+ѬѪ1*&Ѫ6Ӣ KHOA HӐ& &Ð1*1*+ӊ HIӊN THӴC 28
3.1 KiӃn thӭc nӅn tҧng 28
3.1.1 Container & Docker 28
D0i\FKӫ vұWOêYj9LUWXDO0DFKLQH 28
b Container 29
c Docker 30
3.1.2 KiӃQWU~F 31
&{QJQJKӋ hiӋn thӵc 35
3.2.1 Front-end 35
3.2.2 Back-end 42
.KiF 47
CHѬѪ1*3+Æ17Ë&+ 7+,ӂT Kӂ Hӊ THӔNG 53
0{Wҧ EjLWRiQSKkQWtFKWtQKQăQJ 53
4.2 KiӃQWU~FKӋ thӕng 56
Trang 1211
/ѭӧWÿӗ Use case (Use case Diagram) 56
4.4 EER Diagram 60
4.4.1 Entity 60
4.4.2 Relation 67
4.5 ThiӃt kӃ FѫVӣ dӳ liӋu (Database) 68
&+ѬѪ1*7+,ӂT Kӂ GIAO DIӊN 74
5.1 0jQKuQKÿăQJQKұp 74
0jQKuQKÿăQJNt 74
0jQKuQKWUDQJFKӫ 75
0jQKuQKWUDQJTXҧQOêSURILOH 75
0jQKuQKWUDQJXSORDG 76
0jQKuQKWUDQJGDQKViFKXSORDG 76
0jQKuQKWUDQJTXҧQOêWKHRG}L 77
0jQKuQKWUDQJFiFEjLKiWÿmOLNH 77
0jQKuQKOӏch sӱ FiFEjLKiWÿmQJKH 78
0jQKuQKTXҧQOêSOD\OLVW 78
0jQKuQK&KDW 79
0jQKuQKEҧng xӃp hҥng 79
0jQKuQKGDQKViFKTXӕc gia 80
0jQKuQKGDQKViFKEjLKiWWKHRTXӕc gia 80
0jQKuQK7uPNLӃm 81
5.16 Popup comment 82
5.17 Popup add to playlist 82
5.18 Popup notification 83
0jQKuQK[HPSURILOHFiQKkQFӫDQJѭӡLNKiF 83
0jQKuQKQJKHQKҥc 84
5.21 Popup chӍnh sӱDEjLKiWWURQJGDQKViFKXSORDG 84
0jQKuQK[HPGDQKViFKEjLKiW\rXWKtFKFӫDQJѭӡLNKiF 85
0jQKuQKÿăQJQKұp trang admin 85
0jQKuQKWUDQJFKӫ trang admin 86
0jQKuQKWUDQJTXҧQOêEjLKiWWUDQJDGPLQ 86
0jQKuQKWUDQJTXҧQOêQJѭӡLGQJWUDQJDGPLQ 87
0jQKuQKWUDQJTXҧQOêEiRFiRWUDQJDGPLQ 87
&+ѬѪ1*7ӘNG Kӂ79¬+ѬӞ1*3+È775,ӆN 89
6.1 KӃt quҧ ÿҥWÿѭӧc 89
6.2 Thuұn lӧLYjNKyNKăQ 90
Trang 1312
+ѭӟQJSKiWWULӇn 91 7¬,/,ӊU THAM KHҦ29¬1*8ӖN ҦNH 93
Trang 1413
DANH MӨ&+Î1+9Ӏ
+uQK%LӇXÿӗ P{Wҧ QJѭӡLGQJVӱ dөQJF{QJFө JuÿӇ nghe nhҥc [2] 22
Hunh 2.2 BiӇXÿӗ thӇ hiӋn sӵ phә biӃn cӫDFiFQӅn tҧng stream nhҥc [3] 23
Hunh 2.1 Docker 28
HuQK0{KuQKPi\FKӫ vұWOêQJj\[ѭD 28
HuQK0{KuQKYLUWXDOL]DWLRQ 29
HuQK0{KuQKFRQWDLQHU 30
+uQK0{KuQKOӟp [8] 31
+uQK0{KuQK3XE6XE>@ 33
+uQK6RViQK3XE6XEYj2EVHUYDEOH>@ 33
+uQK$QW'HVLJQ 38
+uQK)ORZKRҥWÿӝng cӫa redux [15] 40
+uQK$SROOR&OLHQW 41
+uQK1RGH-6 42
+uQK-:7 46
+uQK)ORZ[ӱ OêFӫa JWT 47
+uQKGraphql 48
+uQK6RViQK5HVW$3,Yj*UDSKTO$3, 49
+uQK)LUHEDVHVWRUDJH 50
+uQK7\SH6FULSW 51
+uQK.LӃQWU~FKӋ thӕng 56
+uQK/ѭӧWÿӗ usecase 57
+uQK/ѭӧFÿӗ ERD 61
+uQK0jQKuQKÿăQJQKұp 74
+uQK0jQKuQKÿăQJNt 74
+uQK0jQKuQKWUDQJFKӫ NKLÿmÿăQJQKұp 75
+uQK 0jQKuQKWUDQJFKӫ NKLFKѭDÿăQJQKұp 75
+uQK0jQKuQKWUDQJTXҧQOêSURILOH 76
+uQK0jQKuQKWUDQKXSORDG 76
+uQK0jQKuQKWUDQJGDQKViFKEjLKiWXSORDG 77
+uQK0jQKuQKWUDQJTXҧQOêWKHRG}L 77
+uQK0jQKuQKWUDQJFiFEjLKiW\rXWKtFK 78
+uQK0jQKuQKOӏch sӱ FiFEjLKiWÿmQJKH 78
+uQK0jQKuQKTXҧQOêSOD\OLVW 79
+uQK0jQKuQKFKDW 79
Trang 1514
+uQK0jQKuQKEҧng xӃp hҥng 80
+uQK0jQKuQKGDQKViFKTXӕc gia 80
+uQK0jQKuQKGDQKViFKEjLKiWWKHRTXӕc gia 81
+uQK0jQKuQKNӃt quҧ WuPNLӃPWKHRWrQEjL 81
+uQK0jQKuQKNӃt quҧ WuPNLӃPWKHRWrQWiFJLҧ 82
+uQK3RSXSFRPPHQW 82
+uQK3RSXSWKrPEjLKiWYjRSOD\OLVW 83
+uQK3RSXSQRWLILFDWLRQ 83
+uQK 0jQKuQK[HPSURILOHFӫDQJѭӡLNKiF 84
+uQK0jQKuQKQJKHQKҥc 84
+uQK0jQKuQKFKӍnh sӱDEjLKiWWURQJGDQKViFKXSORDG 85
+uQK0jQKuQK[HPGDQKViFKEjLKiW\rXWKtFKFӫDQJѭӡLNKiF 85
+uQK0jQKuQKORJLQWUDQJDPGLQ 86
+uQK0jQKuQKWUDQJFKӫ trang admin 86
+uQK0jQKuQKWUDQJTXҧQOêEjLKiWWUDQJDGPLQ 87
+uQK0jQKuQKWUDQJTXҧQOêQJѭӡLGQJWUDQJDGPLQ 87
+uQK0jQKuQKWUDQJTXҧQOêEiRFiR 88
Trang 1615
DANH MӨC BҦNG
BҧQJ6RViQK5HVW$3,Yj*UDSKTO$3, 50
BҧQJ'DQKViFKFiFDFWRU 58
Bҧng 'DQKViFKFiFXVHFDVH 60
Bҧng 4.3 Entity Account 61
Bҧng 4.4 Entity Profile 62
Bҧng 4.5 Entity Song 63
Bҧng 4.5 Entity Comment 64
Bҧng 4.6 Entity Room 64
Bҧng 4.7 Entity Playlist 65
Bҧng 4.8 Entity Message 65
Bҧng 4.9 Entity Notification 66
Bҧng 4.10 Entity Report 67
Trang 1716
DANH MӨC TӮ VIӂT TҲ79¬7+8ҰT NGӲ
Tӯ viӃt tҳt TiӃng Anh TiӃng ViӋt/ DiӉn giҧi
ODM Object Document Mapper
ÈQK[ҥ record dӳ liӋu trong hӋ quҧn trӏ FѫVӣ dӳ liӋXVDQJÿӕLWѭӧng ÿӏQKQJKƭDWURQJFODVV
JSX Javascript XML &~SKiSPӣ rӝng cho Javascript
SEO Search Engine
Optimization Tӕi ѭX KyD F{QJ cө WuP kiӃm
DOM Document Object Model Giao diӋQÿDQӅn tҧQJÿӝc lұp vӟi
QJ{QQJӳ
MVC Model-View-controller
Mүu thiӃt kӃ phҫn mӅPWKѭӡng ÿѭӧc sӱ dөQJÿӇ SKiWWULӇn phҫn
giӳDFK~QJ[1]
GraphQL Graphql Query Language Ng{QQJӳ truy vҩn dҥng ÿӗ thӏ
REST Representational State
Transfer
Mӝt dҥng chuyӇQÿәi cҩXWU~FGӳ
liӋu
Trang 1817
MERN MongoDB, Express,
ReactJS, NodeJS
Mӝt VWDFNFiFF{QJQJKӋ GQJÿӇ SKiWWULӇn phҫn mӅm cho cҧ server
YjFOLHQW
Trang 19&KѭѫQJThiӃt kӃ giao diӋn
x ThiӃt kӃ giao diӋQ8;8,YjFiFOD\RXWFө thӇ
&KѭѫQJ Tәng kӃWYjKѭӟQJSKiWWULӇn
x KӃt quҧ ÿҥWÿѭӧc
x Thuұn lӧLNKyNKDQYjKѭӟQJSKiWWULӇn
Trang 20mҥQJWuQKFҧPQJѭӡLJLjWKuQJKHQKҥFJLDRKѭӣng, bolero,«
HiӋn nay tKuÿmFyY{Vӕ FiFQӅn tҧQJÿăQJWҧi nhҥFOrQFKRPӑLQJѭӡi nghe, FK~QJWDFyWKӇ ÿmWӯQJQJKHTXDQKѭӣ ViӋW1DPWKuFy]LQJPSKD\QKDFFXDWXLQѭӟFQJRjLWKuFyVSRWLI\VRXQGFORXG1Kӳng nӅn tҧng Qj\ÿDVӕ ÿӅu hӛ trӧ QJѭӡLGQJUҩt nhiӋWWuQKFyUҩt nhiӅXWtQKQăQJWLӋQtFKÿӇ phөc vө QJѭӡi nghe 3KkQFKLDkPQKҥc theo chӫ ÿӅ, thӇ loҥi, quӕc gia XӃp hҥng nhӳQJEjLKiWWKӏnh KjQKSKә biӃQKD\ÿӅ xuҩWFKRFK~QJWDQKӳQJEjLKiWJҫn giӕng vӟLEjLKiWPjFK~QJWDKD\QJKH«
7X\QKLrQKLӋQQD\WKuFiFQӅn tҧQJFKRSKpSQJѭӡLGQJXSORDGÿRҥn nhҥc cӫa hӑ OrQYjFKLDVҿ QyYӟi nhӳQJQJѭӡLNKiFWKuFzQUҩt hҥn chӃ 'RÿyYLӋFFynӅn tҧQJJL~SPӑLQJѭӡi chia sҿWUDRÿәLkPQKҥc vӟLQKDXJL~SFKRYLӋc kPQKҥc cӫDFK~QJWDODQWӓDÿӃn nhӳQJQJѭӡLNKiFWUӣ QrQGӉ GjQJYjQKDQKFKyQJKѫQ
1.2 Giӟi thiӋXÿӅ WjL
Nhұn thҩy rҵng nӅn tҧng chia sҿ nhҥFQj\UҩWWK~Yӏ YjFyWtQKODQWӓD.KyDluұQQj\Kѭӟng tӟi viӋc tҥo ra mӝt ӭng dөng vӟLFiFWtQKQăQJFѫEҧn, vӯDÿӫ
QKѭQJYүQÿiSӭQJÿѭӧc hҫu hӃWFiFQKXFҫu vӅ kPQKҥc:
TҥRUDÿѭӧFP{LWUѭӡng, 1 mҥQJ[mKӝLQăQJÿӝQJSKiWWULӇn, linh hoҥWYjÿiSӭQJÿѭӧc nhu cҫu nghe nhҥc cӫDQJѭӡLGQJQJѭӡLGQJFyWKӇ chia sҿ
nhӳQJEjLKiWQKӳQJÿRҥn nhҥFKD\GRFKtQKPuQKWҥo ra hoһFFyWKӇ OjFӫa bҩt cӭ FDVƭQJKӋ VƭQjRPLӉQOjNK{QJYLSKҥm vҩQÿӅ bҧn quyӅn
/jVkQFKѫLFKXQJFKRWҩt cҧ mӑLQJѭӡLNK{QJJLӟi hҥQQKѭVӕ nӅn tҧng lӟn ӣ ViӋW1DPQKѭ]LQJPSKD\QKDFFXDWXLFKӍ FyDGPLQFӫa page mӟLÿѭӧc
quyӅn upload EiLKiWOrQ
x 1JѭӡLGQJFyWKӇ tҧLÿѭӧFEjLKiWFӫa nhӳQJQJѭӡLNKiFOLNH
comment, chia sҿ cҧm nhұn cӫDPuQKNӃt nӕi mӑLQJѭӡi lҥi vӟi nhau WK{QJTXDkPQKҥc
Trang 2120
x MӑLQJѭӡLFyWKӇ WUzFKX\Ӌn vӟLQKDXWK{QJTXDKӋ thӕQJFKDWFyVҹn trong hӋ thӕQJJL~Scho viӋc kӃt nӕLWUDRÿәLWK{QJWLQWUӣ QrQWKXұn tiӋQYjGӉ GjQJKѫQ
x HӋ thӕng xӃp hҥQJEjLKiWSKkQFKLDEjLKiWWKHRTXӕc gia, thӇ loҥi JL~SFKRYLӋFQJѭӡLGQJFyWKӇ dӉ GjQJWLӃp cұn vӟLFiFEjLKiWPjPuQK\rXWKtFKFNJQJQKѭFiFEjLKiWPӟi nәLWUrQWKӏ WUѭӡng
x Sӱ dөng hӋ thӕQJDGPLQÿӇ [pWGX\ӋWEjLKiWQKұQEiRFiRUHSRUWEjLKiWQJѭӡLGQJ *L~SFKRKӋ thӕng trӣ QrQFOHDQKѫQNK{QJ[Xҩt hiӋn FiLEjLKiWQJѭӡLGQJYLSKҥPÿӅu luұt cӫa hӋ thӕng
1.3 MөFWLrXFӫDÿӅ WjL
MөFWLrXFӫDÿӅ WjLOjSKiWWULӇQÿѭӧc mӝt hӋ thӕng vӟLFiFWtQKQăQJGӵDWUrQnghiӋp vө ÿѭӧFSKkQWtFKSKiLErQWUrQ1KѭQJGRWtQKFKҩt cӫa nhӳng nӅn tҧQJkPnhҥFOjFyKӋ thӕQJY{FQJWROӟQWtQKQăQJQKLӅXFNJQJQKӭ FyÿӝLQJNJSKiWWULӇn mҥnh mӁ'RÿyPөFWLrXFҧXNKyDOXұQQj\FKӍ OjFyWKӇ SKiWWULӇQÿѭӧc tӕLÿDnhӳQJWtQKQăQJFѫEҧQYjFiFWtQKQăQJQkQJFiRWKuFyWKӇ triӇQNKDLÿѭӧc nhiӅu nhҩWFyWKӇ 9uWKӃ QrQÿӅ WjLGNK{QJWKӇ FyKӋ thӕng lӟQQKѭQKӳng nӅn tҧQJÿyWKuFNJQJYүQFyWKӇ ÿiSӭQJÿѭӧc nhӳQJWtQKQăQJFѫEҧn nhҩt:
x 3KkQORҥLEjLKiWWKHRTXӕc gia, thӇ loҥi
x Push notification real-time mӛLNKLFyHYHQWJuÿy[ҧy ra
Trang 2221
1.4 Phҥm vi tiӃp cұn cӫDÿӅ WjL
Ӭng dөQJQj\Kѭӟng tӟi nhӳQJQJѭӡL\rXkPQKҥFYjFyQKXFҫu chia sҿ kPQKҥc cӫDPuQKÿӃn vӟi tҩt cҧ mӑLQJѭӡi TҩWQKLrQKӋ thӕng sӁ FjQJSKiWWULӇn nӃXQKѭFjQJFyQKLӅXQJѭӡLTXDQWkPYjFKLDVҿ nhӳQJEjLKiWFӫa hӑJySSKҫn JL~SFKRKӋ thӕQJÿDGҥQJYjSKRQJSK~KѫQ
7X\QKLrQӭng dөQJQj\VRYӅ TX\Y{WKuNK{QJWKӇ QjRVRViQKÿѭӧc vӟLFiFnӅn tҧng lӟn hiӋQQD\'RÿyWURQJNKX{QNKә NKyDOXұQQj\WKuӭng dөng sӁ chӍ FyÿӃn khҧ QăQJOjKRҥWÿӝng әQÿӏQKWUѫQWUXFNJQJQKѭFXQJFҩSÿӃn cho mӝt bӝ phұn nhӓ QJѭӡi sӱ dөng
7URQJWѭѫQJODLWKuQӃXFyWKӇ, ӭng dөQJQj\VӁ SKiWWULӇQWKrPQKLӅXWtQKQăQJQkQJFҩp hӋ thӕng lӟQKѫQÿiSӭQJÿѭӧc nhu cҫu cӫa nhiӅXQJѭӡLQJѭӡi WKDPJLDKѫQ[k\Gӵng cӝQJÿӗng trong mҥQJ[mKӝLQj\WROӟQYjSKiWWULӇQKѫQ
Trang 2322
&+ѬѪ1*7ӘNG QUA1Ĉӄ 7¬,
2.1 KhҧRViWWKӏ WUѭӡng
+uQK%LӇXÿӗ P{Wҧ QJѭӡLGQJVӱ dөng F{QJFө JuÿӇ nghe nhҥc [2]
Hunh 2.1 BiӇXÿӗ thӇ hiӋQFiFQӅn tҧQJPjQJѭӡLGQJVӱ dөQJÿӇ nghe nhҥc
Trang 2423
+uQKWKӭ OjELӇXÿӗ KuQKTXҥWP{Wҧ rҵQJQJѭӡLGQJWKѭӡng sӱ dөQJJuÿӇ nghe nhҥc Qua biӃXÿӗ WKuWDFyWKӇ thҩ\U}Oj<RXWXEHYj6SRWLI\OjQӅn tҧng ÿѭӧFQJѭӡLGQJOӵa chӑn nhiӅu nhҩWÿӇ nghe nhҥF7URQJÿy<RXWXEHWX\NK{QJphҧi OjPҥQJ[mKӝLÿӇ chia sҿ kPQKҥFPjQyOjPҥQJ[mKӝi chia sҿ video, QKѭQJQJѭӡLGQJYүn chӑn youtube nhiӅXKѫQVRYӟLFiFQӅn tҧQJkPQKҥc nәi tiӃQJQKѭ6RXQGFORXGKD\6SRWLI\
BiӇXÿӗ thӭ OjNKҧRViWYӅ sӵ phә biӃn cҧXFiFQӅn tҧng nghe nhҥc trrQWRjQWKӃ giӟLTXDÿyWKuFK~QJWDWKҩ\U}6SRWLI\tӓ UDYѭӧt trӝLKѫQKҷn so vӟLFiFnӅn tҧQJNKiF
2.2&iFQӅn tҧQJOLrQTXDQ
Mӝt sӕ nӅn tҧQJOLrQTXDQÿӃQÿӅ WjLQj\
x Ӣ ViӋW1DPWKuFyQәi bұt nhҩWOj]LQJPSYjQKDFFXDWXLQӅn tҧng Qj\FXQJFҩp rҩt nhiӅXEjLKiWÿӫ tҩt cҧ FiFWKӇ loҥi, quӕc gia, chӫ ÿӅ Hunh 2.2 BiӇXÿӗ thӇ hiӋn sӵ phә biӃn cӫDFiFQӅn tҧng
stream nhҥc [3]
Trang 25RDIO
ѬXÿLӇm
x VӟLKѫQWULӋXEjLKiWYjFyVҹn ӣ quӕFJLD5GLROjOjPFKROӵc NpRÿiQJNӇ WURQJkPQKҥc trӵc tuyӃn trӵc tuyӃn kinh doanh
x Hӑ FNJQJFKRSKpSEҥQÿӇ hӝi nhұSKѫQQӳDFiFGӏch vө vӟi Facebook
ÿӇ cho bҥQYjEҥQEqFӫa bҥQÿӇ OjPWKHRWKӏ hiӃXkPQKҥc cӫa nhau
x Xoay nһQJOjPӝWWtQKQăQJFKRSKpSEҥn xem nhӳQJJuFӝQJÿӗng RGLROjQJKH
x Khi bҥn bҳWÿҫXÿӇ OjPWKHRQKӳQJQJѭӡLGQJNKiFEҥn sӁ nhұn thҩy avatar cӫa hӑ ErQGѭӟi nhӳQJDOEXPPjKӑ ÿmQJKHKRһc nhӳng QJѭӡi hӑ ÿmOѭXĈk\OjPӝWWtQKQăQJWKXұn tiӋQÿӇ JL~SEҥQNKiPSKiWKrPkPQKҥc
x 5GLRQKѭ'HH]HUKӛ trӧ hҫu hӃWFiFQӅn tҧng
1KѭӧFÿLӇm
x /jPӝt dӏch vө quҧQJFiRKӛ trӧ QKѭQJNK{QJSKҧLOjNK{QJJLӟi hҥn, YuYұ\PjFyWKӇ NK{QJWKXK~WWҩt cҧ mӑLQJѭӡi
Trang 2625
x Hӑ FyFiFÿjLSKiWWKDQKWK{QJPLQKWtQKQăQJW\FKӍnh cӫa bҥn kinh nghiӋm nghe theo khҭu vӏ cӫa bҥQWURQJkPQKҥc YjQyVӁ ÿӅ xuҩWFiFEjLKiWPӟi, bҥQFyWKӇ tұQKѭӣQJVXSHULRU[DKѫQ
x GiӕQJQKѭ*URRYHVKDUNEҥQFyWKӇ ÿăQJQKұp trӵc tiӃp vӟi email cӫa bҥn, Google Plus hoһc Facebook
x Mӝt trong nhӳQJÿLӅu tuyӋt vӡi vӅ WUDFNVOjEҥQFyWKӇ kӃt nӕi vӟLFiFFiQKkQ[mKӝLWK{QJTXDkPQKҥc bҵQJFiFKSKiWKLӋQGDQKViFKSKiWcӫa hӑ hoһc bҵQJFiFKEuQKOXұQWUrQFK~QJ
x K{QJFyTXҧQJFiRJLiQÿRҥn trҧi nghiӋPkPQKҥc
1KѭӧFÿLӇm
x BҥQNK{QJWKӇ bӓ TXDFiFEjLKiWTXiQKLӅu trong mӛLGDQKViFKSKiW
x K{QJFyFQJPӝWêWKӭc cӝQJÿӗQJ[mKӝLYuNK{QJFKLDVҿ danh ViFKSKiWFӫa bҥn vӟi bҥQEqFӫa bҥQErQQJRjLFӫa trang web
SOUNDCLOUD
ѬXÿLӇm
Trang 2726
x phөc vө FKRÿiPÿ{QJKLSVWHUYuQyFKRSKpSÿӇ ҭQGDQKYjFiFW\chӑQÿӇ chia sҿ kPQKҥc cӫa bҥn vӟi thӃ giӟi
x KiӇXGiQJÿҽSYjWӕi giҧn vӟi giao diӋn
x CӝQJÿӗng lӟn, vӟi nhiӅXQKyPYjÿDPPrkPÿѭӧFGjQKULrQJFKRkPQKҥc
x 1yFyWtQKWKӡi gian hӋ thӕQJEuQKOXұQQѫLQJѭӡLGQJFyWKӇ thҧo luұn vӅ mӝt sӕ phҫn, lӡLEjLKiWKRһc nhӏSÿұp trong mӛLEjLKiWO~FQj\WKtFKKӧp
x NӃu bҥn sӵ NKDRNKiWFKRkPQKҥFEDQÿҫXVDXÿyÿLӅXQj\OjQӅn tҧng cӫa bҥn; hoһc nӃu bҥn chӍ cҫQWuPNLӃm mӝt sӕ kPQKҥc mӟi sau ÿyWuPWKҩy mӝt thӇ loҥLWKtFKKӧSYjÿӇ FKRÿ{LWDLFӫa bҥQNKiPSKikPQKҥc mӟL\rXWKtFKFӫa bҥn
x 6RXQGFORXGFNJQJOjFyVҹQFKRÿLӋn thoҥLGLÿӝng Android hoһc
L3KRQHYjFyPӝt hӛ trӧ tuyӋt vӡi
x BҥQFyWKӇ WtFKKӧp kinh nghiӋm nghe SoundCloud cӫa bҥQWURQJWjLkhoҧn Facebook cӫa bҥQFKRSKpSFKREҥQEqFӫa bҥQÿӇ xem nhӳng JuEҥQÿDQJQJKHKRһFÿӇ cho hӑ OjPWKHRWKӏ hiӃXkPQKҥc cӫa bҥn
x BҥQFyWKӇ ÿăQJQKұp vӟi Google cӫa bҥQYjWjLNKRҧn Facebook, Spotify chӍ FKRSKpSEҥQÿăQJQKұp bҵQJWjLNKRҧn FB
x ;mKӝLUDGLRDSSFyVҹQWUrQL2V9ӟLQyQJѭӡLGQJFyWKӇ tҧLOrQDQLPDWHGJLIYjGzQJFӫDÿjLSKiWWKDQK[mKӝi tӯ 0\VSDFHFKRSKpSFKRWKrPGLVFRYHUDELOLW\
1KѭӧFÿLӇm
x 1yOjWKLӃu nghӋ VƭKjQJÿҫu kӇ tӯ khi nhiӅXQJѭӡLÿmNêWrQOjWѭѫQJÿӕLNK{QJU}
Trang 28x +ѫQQӳD*URRYHVKDUNFKRSKpSFKRVӵ ULrQJWѭQKLӅXKѫQYjRFӝng ÿӗng
x K{QJFKӍ bҥQFyWKӇ nghe nhҥF\rXWKtFKFӫa bҥQQKѭQJEҥQFyWKӇ chӑQÿjL SKiWWKDQKKRһc nhӳQJQJѭӡLGQJNKiFGDQKViFKSKiWFNJQJQKѭFKLDVҿ cӫDULrQJEҥn
x *URRYHVKDUNFNJQJOjWѭѫQJWKtFKYӟLÿLӋn thoҥLGLÿӝng nӅn tҧng 1KѭӧFÿLӇm
x /jPӝt dӏch vө quҧQJFiRKӛ trӧ QKѭQJNK{QJSKҧLOjNK{QJJLӟi hҥn, YuYұ\PjFyWKӇ NK{QJWKXK~WWҩt cҧ mӑLQJѭӡi
Trang 2928
&+ѬѪ1*&Ѫ6Ӣ KHOA HӐ& &Ð1*1*+ӊ HIӊN THӴC
Trong phҫQQj\VӁ P{Wҧ YjWUuQKEj\QKӳng kiӃn thӭc nӅn tҧQJFѫVӣ khoa hӑFYjF{QJQJKӋ hiӋn thӵFÿѭӧFiSGөQJÿӇ thӵc hiӋQÿӅ WjLNKRiOXұQQj\
'ROjÿӅ WjLNKyDOXұn Qj\OjWKXӝFQKyPF{QJQJKӋ phҫn mӅPYjKӋ thӕng WK{QJWLQQrQNK{QJWUuQKEj\YӅ FѫVӣ khoa hӑc
Trang 3029
&yVӕ vҩQÿӅ vӟLP{KuQKQj\ÿyOjPi\FKӫ chӍ FjLÿѭӧc 1 hӋ ÿӅXKjQK
26 'RÿyNK{QJWKӇ NKDLWKiFKӃWÿѭӧc lӧi thӃ cӫDPi\FKӫ GRGFyUDPNKӫng hay ssd khӫQJQKѭWKӃ QjRÿLQӳa VҩQÿӅ Qj\VӁ Jk\UDY{FQJOmQJSKtWjLQJX\rQNKLPjShҫn cӭQJPi\WtQKSKiWWULӇn vӟi tӕFÿӝ FKyQJPһt
6DXQj\WKuFyNKiLQLӋm mӟLÿѭӧFUDÿӡLĈyOj9LUWXDOL]DWLRQ
&{QJQJKӋ YLUWXDOL]DWLRQQj\FKRSKpSFK~QJWDFyWKӇ FjLÿһWÿѭӧc nhiӅu OS WUrQFQJPi\FKӫ ĈѭӧF[k\Gӵng dӵDWUrQêWѭӣQJSKkQFKLDә cӭng, ram Tӯ ÿyWUrQPӝWPi\FKӫ FyWKӇ tҥRUDÿѭӧc nhiӅXPi\ҧRNKiFQKӳQJPi\ҧRQj\FKҥy ÿӝc lұp vӟi nhau
7X\QKLrQF{QJQJKӋ Qj\YүQFzQFyYjLYҩQÿӅ:
x Khi tҥRUDPi\ҧRWKuPi\FKӫ OX{QOX{QSKҧi chia WjLQJX\rQFKRQy(ram, ә cӭng) thұm chӍ cҭn bұWPi\ҧROrQWK{LFKӭ FKѭDFKҥ\WiFYө JuhӃW/jPOmQJSKtWjLQJX\rQÿmFKLDFKRPi\ҧo
x 0i\FKӫ sӁ phҧi chӏu tҧLFKRFiFPi\ҧo trong hӋ thӕQJNK{QJWKӇ hoҥWÿӝng hӃWF{QJVXҩWNKyTXҧQOê
x 9uQKӳQJNKyNKăQYҩQÿӅ QKѭYұ\FKRQrQNKiLQLӋPFRQWDLQHUÿѭӧc UDÿӡi
b Container
Hunh 3.3 0{KuQKYLUWXDOL]DWLRQ
Trang 3130
&iFFKѭѫQJWUuQKӭng dөng sӁ ÿѭӧFÿyQJJyLWKjQKFiLFRQWDLQHU&iF
FRQWDLQHUQj\VӁ tҥRUDP{LWUѭӡng bao gӗm nhӳng thӭ PjSKҫn mӅm cҫQÿӇ chҥy VjFKҥ\KRjQWRjQÿӝc lұp vӟi hӋ thӕng, hӋ thӕQJNK{QJFҫn phҧLFjLÿһWTXinhiӅu thӭ PjSKҫn mӅm cҫQÿӇ chҥ\9jFiFFRQWDLQHUQj\ÿӅu sӱ dөng chung kernel cӫa host OS
dө QKѭ0\64/1*,1;8EXQWX1RGH YjRWURQJFRQWDLQHU1Kӳng container Qj\FKҥ\WURQJQKkQFҧu hӋ ÿӅXKjQK>6@+D\QyLFiFKNKiF'RFNHUOjPӝt nӅn tҧng
ÿӇ cung cҩSFiFKÿӇ EXLOGLQJGHSOR\YjUXQFiFӭng dөng mӝWFiFKGӉ GjQJWUrQnӅn tҧng ҧRKyD- "Build once, run anywhere"
Ӭng dөQJÿѭӧF'RFNHUKyDFKҥ\WURQJFRQWDLQHUFyWKӇ ÿѭӧc sӱ dөng trong bҩt cӭ nӅn tҧng, hӋ thӕQJQjR9tGө QKѭ/DSWRSFӫa developer, hӋ thӕQJWUrQFѫ
sӣ hay trong hӋ thӕQJÿiPPk\FORXGFRPSXWLQJ 1yFzQOjF{QJFө tҥRUDP{LWUѭӡQJÿѭӧFÿyQJJyL&zQJӑLOjFRQWDLQHU WUrQPi\WtQKPjNK{QJOjPҧQKKѭӣng KD\WiFÿӝQJÿӃQP{LWUѭӡng hiӋn tҥi cӫDPi\FKӫP{LWUѭӡng trong Docker sӁ chҥy ÿӝc lұp
'RFNHUFyWKӇ OjPYLӋc tre6n hҫu hӃWFiFQӅn tҧng hӋ ÿӅXKjQKSKә biӃn nhҩt hiӋQQD\QKѭ/LQX[:LQGRZVKD\0DF26
Hunh 3.4 0{KuQKFRQWDLQHU
Trang 323.1.2 KiӃQWU~F
ÈSGөQJFiFNLӃQWU~FYjFiFSDWWHUQYjRWURQJNKyDOXұn
a) 0{KuQKOӟp [7]
0{KuQKOӟp (3-layers) gӗPFySKҫQFKtQK
x Presentation Layer (GUI): LӟSQj\ÿѭӧFFRLQKѭOjWҫng UI cӫa ӭng dөQJÿҧm nhiӋm trӑQJWUiFKJLDRWLӃp vӟLQJѭӡi dQJ%DRJӗm FiFUI component cҩXWKjQKQrQWUDQJZHEKD\ӭng dөng Ĉӗng thӡLFzQFKӭDFiFFRPSRQHQWGQJÿӇ hiӇn thӏ UDGDWD9tGө: List, Menu, Card, Avatar,« YjFiFcomponent GQJÿӇ nhұQGDWDYjR9tGө: Input, Button, Select, «