Pythonie jest świetnym językiem do budowania strumieni aktywności i kanałów informacyjnych. Tommaso i ja napisaliśmy pakiet Stream Framework. https://github.com/tschellenbach/stream-framework Jest to obecnie najczęściej używane rozwiązanie Python do budowy kanałów informacyjnych. Oferujemy również hostowane rozwiązanie pod adresem https://getstream.io. Klient Django jest zdecydowanie najłatwiej zacząć z: https://github.com/GetStream/stream-django i Python można znaleźć tutaj (https://github.com/getstream/stream-python)
Część szablonów działa tak
{% load stream_django %}
{% for activity in activities %}
{% render_activity activity %}
{% endfor %}
będzie to uczynić szablon znajdujący się w działalność/tweet.html z aktywnością jako kontekstem. Na przykład
{{ activity.actor.username }} said "{{ activity.object.body }} {{ activity.created_at|timesince }} ago"
Pełne docs tutaj: https://github.com/GetStream/stream-django#templating
Ramowa Stream pozwala zbudować dowolny typ kanału informacyjnego przy użyciu albo Redis lub Cassandrę. Jest zbudowany na skalę i tworzy indywidualne kanały informacyjne za pomocą procesu fanout.
Oprócz struktury Stream (którą oczywiście wolę) istnieje wiele innych rozwiązań.Pełna lista dostępna jest na pakietach django: https://www.djangopackages.com/grids/g/activities/
Należy pamiętać, że w przypadku kanałów informacyjnych należy pamiętać o kilku problemach skalowania. Zasadniczo istnieją 3 wspólne podejścia:
strategie Denormalizacja
Pull Najwięcej użytkowników rozpocząć się w ten sposób. Po otwarciu strony kanału możesz po prostu wysyłać zapytania do wszystkich użytkowników, których obserwujesz. Jeśli kanały użytkowników są przechowywane w pamięci, będzie to działało przez dłuższy czas. W końcu dość trudno jest nadal używać strategii, chociaż często trzeba przesyłać zapytania do większości węzłów przechowujących pliki danych użytkownika.
Wciśnij Metoda "push" zapisuje Twoją aktywność we wszystkich kanałach obserwujących. Oczywiście oznacza to, że marnujesz mnóstwo zasobów, ale efekt końcowy to wstępnie obliczony kanał na użytkownika. To podejście (choć początkowo niezbyt wydajne) skaluje się ładnie.
Kombinacja Niektóre zoptymalizowane systemy wykorzystują połączenie tych dwóch podejść. Zobacz także artykuł Yahoo na ten temat.
pamięć masowa
Pod względem przechowywania wszystkich tych danych najczęstsze opcje są Redis, Cassandra i MongoDB. Niech szybko porównać je:
Redis Redis jest niezwykle prosty w instalacji i utrzymaniu. Przechowuje jednak tylko dane w pamięci. Oznacza to, że będziesz musiał zoptymalizować sposób serializowania danych i być może wrócić do bazy danych dla rzadziej sprawdzanych danych. Innym problemem jest to, że dodawanie komputerów do klastra Redis nie jest banalne.
MongoDB Mongo DB jest wykorzystywany przede wszystkim przez kilka projektów rubinowe i jest również dostępny jako backend dla pump.io przez e14n. Osobiście nigdy nie uruchomiłem go w produkcji, więc nie mogę właściwie ocenić tej opcji. Istnieje jednak wiele blogów, które dotyczą problemów z wydajnością, skalowalnością i łatwością obsługi mongo.
Cassandra Fashiolista, Instagram i Spotify używają Cassandry. Nasze hostowane rozwiązanie wykorzystuje także Cassandrę jako zaplecze. Jest niezwykle ekonomiczna w obsłudze i możesz z łatwością dodawać kolejne węzły. Jedynym problemem jest to, że trudno go skonfigurować i obsługiwać.
Artykuły
Ponadto przyjrzeć się tej wysokiej skalowalności postu zostały wyjaśnić niektóre z decyzji projektowych zaangażowanych: http://highscalability.com/blog/2013/10/28/design-decisions-for-scaling-your-high-traffic-feeds.html
Aby dowiedzieć się więcej na temat projektu paszowego Gorąco polecam przeczytaniu niektórych artykuły, które oparliśmy na Feedly:
przyjrzeć za t, jak robimy szablon tutaj: https://github.com/GetStream/stream-django#templating Niestandardowy znacznik szablonu sprawia, że wszystko jest całkiem czyste. – Thierry