Założenia
- tworzymy witrynę o dużym natężeniu ruchu
- witryna generalnie nie zawiera treści tworzonych przez użytkownika (nie licząc ocen, komentarzy, profilu itp.)
- za edycję treść odpowiada niewielka grupa osób (CMS)
- chcemy użyć GAE do zapewnienia sobie skalowalności
- chcemy użyć admina z Django + dodatki, by szybko utworzyć system CMS
- mamy również dane statyczne liczone w GB i serwowane w TB
Propozycja
W jednym z poprzednich wpisów przedstawiłem prostego admina w GAE dla tej witryny. Daleko mu jednak do elastyczności choćby admina Django, nie wspominając o rozbudowie i dodatkach. Obecne próby migracji admina Django i uruchomienia go na GAE są coraz lepsze, ale z powodu różnic nie wszystkie elementy można łatwo przenieść.
Z przedstawionych założeń wynika, że CMS nie musi być skalowalny, bo nie jest to system z edycją treści przez użytkownika. Część publiczna w niewielkim stopniu obsługuje dane użytkownika. Za serwowanie dużych danych statycznych może w chwili obecnej odpowiadać Amazon S3 + dodatek w postaci CDN.
Wydaje się, że rozsądnym rozwiązaniem w tym momencie byłoby utworzenie systemu podwójnego:
- część publiczną obsługuje GAE
- część prywatną obsługuje własny serwer lub standardowy hosting
Zalety
- CMS tworzymy w systemie relacyjnym, co daje dużą elastyczność obróbki danych i pełny wachlarz narzędzi admina Django wraz z dodatkami
- za skalowalność systemu odpowiada Google App Engine, bo do obsługi CMS wystarczy jeden serwer i jedna baza danych (nawet jeśli 4 rdzeniowa)
- za obsługę dużych danych statycznych odpowiada Amazon S3
- koszty własnego System Engineering są w zasadzie zerowe, bo wszystko możemy hostować zewnętrznie
- DataStore w GAE możemy zoptymalizować pod kątem odczytu danych - nie musi ona odpowiadać strukturze na potrzeby CMS
Wady
- musimy napisać własną warstwę synchronizacji bazy CMS z GAE
- musimy dwukrotnie napisać modele danych (być może nawet całkiem różne)
Wnioski
Czy warto robić coś takiego, czy jednak zmuszać się do pisania własnego systemu administracyjnego w GAE?
Wydaje mi się, że w tym konkretnym przypadku użycia warto to rozdzielić, bo CMS i część publiczna to cały czas dwie różne sprawy, a tworzenie CMS jest najczęściej powtarzalne aż do bólu. Sytuacja jest inna, gdybyśmy próbowali stworzyć drugie Google Docs lub Facebook, czyli systemy z danymi wypełnianymi głównie przez użytkowników.
0 comments:
Post a Comment