Fablo: instant search, czyli jak zmieniamy standardy wyszukiwania
2010-10-16
Dwa tygodnie temu pisałem o tym, jak udało nam się przyspieszyć działanie wyszukiwarki Fablo. Dziś efekt prac: mamy instant search dla e-commerce. Natychmiastowe wyszukiwanie, które przewraca do góry nogami dotychczasowe standardy w wyszukiwaniu. Zapraszam do obejrzenia na screencaście (tutaj lub bezpośrednio w YouTube):
A teraz FAQ (tak, już mi kilka osób zadało te pytania):
- Czy na wideo jest prawdziwa prędkość działania? Czy to nie jest uruchomione lokalnie na komputerze?
Tak, to jest prawdziwa prędkość. Serwer to produkcyjny serwer Fablo uruchomiony w Amazon AWS (EC2).
- Dlaczego podczas wyszukiwania pojawia się napis: "Czas wyszukiwania: 0 sekund"?
Nasz serwer mierzy czas wywołaniem System/currentTimeMillis, ma więc rozdzielczość milisekundową. Czasy odpowiedzi poniżej 1ms są zaokrąglane do 0.
- Każdy umie szybko wyszukiwać ciągi znaków. Co w tym trudnego?
A z obsługą literówek? Polskich znaków? Odmiany wyrazów? Liter zamienionych ze sobą miejscami?
- To pewnie jest fikcyjna baza danych z kilkoma produktami?
Nie, demonstracja jest uruchomiona na kompletnej bazie danych sporego sklepu.
Inaczej mówiąc, to co widać na wideo to jest to, co można dziś mieć w swoim sklepie. Co więcej, można mieć abonament na innowację: wprowadzenie Fablo oznacza, że wyszukiwanie staje się z czasem coraz lepsze, bez wysiłku ze strony sklepu.
Wkrótce kolejne screencasty!
Gratuluję! Ja jestem pod wrażeniem.
Imponujące. Rozumiem, że to sprawka Clojure. Można prosić o więcej szczegółów, gdzie jego cechy zostały wykorzystane?
Poza tym, bardzo, bardzo zainteresował mnie temat serwer Fablo uruchomiony w Amazon AWS (EC2). Można prosić o więcej szczegółów dot. konfiguracji? Samemu przymierzam się do EC2, ale wciąż za mało wiedzy.
Bardzo słaba jakość nagrania. Dopiero "HD" pokazuje wyraźnie napisy.
Warto to poprawić.
AWO: Niestety, nie mamy na to wpływu. YouTube tak pokazuje i wymaga ręcznego przełączenia na "HD". Dodałem za to link do oryginalnego wideo pod postem.
Jacek: tak, większość oprogramowania jest napisana w Clojure i działa na JVM. Clojure pomaga nam pisać bardzo elastyczny kod, którego jest mało, za to robi sporo. Dzięki temu że jest go mało możemy dużo eksperymentować, stąd szybki postęp i technologie, które u innych wymagają przepisywania dużych części silnika. Clojure pomaga też bardzo ze współbieżnością.
Co do AWS — nie chcę podawać wszystkich szczegółów, bo jednak konkurencja nie śpi. Mogę napisać, że zbudowaliśmy rozproszoną architekturę, gdzie każdy element oprogramowania może zostać wyłączony w dowolnym momencie. Oprogramowanie podzielone jest na kilka modułów, dzięki czemu możemy niezależnie skalować obsługę zapytań, ściąganie i aktualizację danych, oraz samo indeksowanie i uczenie maszynowe.
Serwery obsługujące zapytania (API) zbudowane są tak, że każdy może obsługiwać jednego lub więcej klientów, są też równoprawne: każdy potrafi odpowiednio przekierować zapytanie do innych serwerów. Dzięki temu jesteśmy w stanie robić takie rzeczy jak upgrade oprogramowania bez przerwy w obsłudze zapytań.
Używamy głównie instancji m1.large, ze względu na RAM, ale w przyszłości pewnie bardzo zróżnicujemy używane maszyny.
Czy robiłeś pomiary szybkości indeksowania? Jestem ciekawy, jak Wasz produkt wypada w porównaniu ze Sphinxem, który, cytuję*: "Sphinx indexes up to 10-15 MB of text per second per single CPU core". Jak to wygląda w Fablo?
*) Źródło: http://sphinxsearch.com/about
Scottie: w Fablo indeksujemy tak szybko, jak to jest potrzebne naszym klientom :-)
(inaczej mówiąc: prędkość indeksowania nie jest specjalnie istotna i nawet jej nie mierzymy, szczególnie że u nas nie ma znaczenia MB tekstu na sekundę, tylko co najwyżej liczba produktów na sekundę)