19 December 2008

CMS, GAE i admin Django

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