Na czym umieścić serwis pokroju ebay ?

Na czym umieścić serwis pokroju ebay ?

Wątek przeniesiony 2021-05-16 23:47 z Off-Topic przez somekind.

masterc
  • Rejestracja:około 4 lata
  • Ostatnio:około 3 lata
  • Postów:425
0

Muszę napisać projekt taki jak ebay, prosty system aukcyjny. Tylko że ma być skalowalny żeby mógł obsłużyć miliony osób. Czego użyć do takiego projektu ?


Wymyśliłem, że nie chce mi się.
.andy
No ja bym użył komputera ;)
masterc
Z komputerem to każdy umi :)
jurek1980
To podejmij wyzwanie aktimela - taśma perforowana i ręcznie dziurkujesz.
PerlMonk
I spróbuj użyć dwóch rąk na raz, żeby wielowątkowo było.
S9
  • Rejestracja:ponad 4 lata
  • Ostatnio:około 2 lata
  • Lokalizacja:Warszawa
  • Postów:1092
6

Jeszcze nie obsługuje nawet jednej, a Ty myślisz już o milionach? Nie widze w tym sensu.


masterc
ale kogo ty nie obsługujesz ?
PerlMonk
@Aleksander32: bo to wizjoner jest 💩
Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
7

Amazon śmiga na AWSie więc AWS powinien ogarnąć ;)


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
masterc
  • Rejestracja:około 4 lata
  • Ostatnio:około 3 lata
  • Postów:425
0

@Shalom: No i właśnie rozkminiałem temat i myślę tak czy starczy S3, E3, Scale i Load balancer czy uzyc serverless i zrobic to na AWS Lambda ?


Wymyśliłem, że nie chce mi się.
.andy
  • Rejestracja:ponad 16 lat
  • Ostatnio:około 3 lata
  • Postów:1524
3

Mi się wydaje, że tutaj nie chodzi o samą 'chmurę' ale bardziej o architekturę rozwiązania.


Software is like sex: it's better when it's free.
- Linus Torvalds
masterc
  • Rejestracja:około 4 lata
  • Ostatnio:około 3 lata
  • Postów:425
0

@.andy: chodzi o to jak by to zrobic, sama aplikacja np umiesczona na instancji E3 podpiety load balancer i uruchamia on kolejna instancje gdy ruch jest wiekszy lub ja wylacza gdy mniejszy. natomiast baza danych z sesjami powinna byc key-value zeby byla szybka, no i druga baza z produktami i aukcjami. ale nie wiem czy to co mysle jest ok.


Wymyśliłem, że nie chce mi się.
PerlMonk
Podpięty a nie Podbipięty?
masterc
Podbipięty ? hahhaahh co ?
.andy
  • Rejestracja:ponad 16 lat
  • Ostatnio:około 3 lata
  • Postów:1524
2

@masterc:
Podam Ci przykład ejabberd (implementacja serwera protokołu XMPP). Skubańce ponoć na jednym nodzie obrobili 2+ mln użytkowników ;)

Both ejabberd and the test platform were running on Amazon EC2 instances. ejabberd was running on a single node of instance type m4.10xlarge (40 vCPU, 160 GiB). Tsung instance was identical.

Samo zaplecze sprzętowe to jedno ale bardziej liczy się architektura rozwiązania. Bo jak architektura będzie źle pomyślana, to zapchasz całego Amazona a aplikacja dalej nie obsłuży 1mln userów ;)


Software is like sex: it's better when it's free.
- Linus Torvalds
edytowany 1x, ostatnio: .andy
S9
  • Rejestracja:ponad 4 lata
  • Ostatnio:około 2 lata
  • Lokalizacja:Warszawa
  • Postów:1092
5

@masterc: ja bym zaczął od odpowiedniej abstrakcji, oddzielenia logiki biznesowej i modelu domonowego od szczegółów infrastrukturalnych (bazy danych, chmura etc). Wtedy jak juz będzie większe zapotrzebowanie to podmienisz implementację tych infrastrukturalnych detali. Oczywiście jesli dobrze zrozumialem Twoje posty.


ZI
  • Rejestracja:ponad 4 lata
  • Ostatnio:ponad 3 lata
  • Postów:208
5

Musisz sobie zawęzić wymagania żeby to miało sens. Skalowanie nie zadziała ci dla wszystkich user caseów jednakowo, wyświetlenie aktualnych (albo aktualnawych) aukcji dla milionów userów jest stosunkowo proste o ile nie personalizujesz tego widoku i o ile boty ci nie nabiją w cholerę sesji jak będą ci scrapeować oferty :), wystawienie nowego bidu w aukcji już jest bardziej skomplikowane (musi być atomowe), tak samo wystawienie aukcji (musisz tą aukcję jakoś zindeksować w szukajkach i wywalić cache dla danych kategorii).

Rzygnięcie sobie technologiami jak Cloudfront ALB ASG EC2 ElastiCache i RDS nie rozwiąże tych problemów.

edytowany 1x, ostatnio: Zing
PanamaJoe
  • Rejestracja:ponad 4 lata
  • Ostatnio:około 3 lata
  • Postów:310
2
masterc napisał(a):

Muszę napisać projekt taki jak ebay, prosty system aukcyjny. Tylko że ma być skalowalny żeby mógł obsłużyć miliony osób. Czego użyć do takiego projektu ?

Ja bym do takiego projektu użył jakiegoś software house'u, żeby mi to napisali, skoro to na miliony klientów to inwestor musi wyskoczyć z grubego hajsu. Nie ma rady.


A poza tym sądzę, że bootcampy należy zniszczyć.
masterc
  • Rejestracja:około 4 lata
  • Ostatnio:około 3 lata
  • Postów:425
0

@PanamaJoe: Nie no, takie pitu pitu jak formularze i dodawanie aukcji to ja napisze, to nie trzeba aż softhaousu. Chodzi mi tylko ze do przemyslenia jest baza, sesje i skalowanie instancji. Musze te odpowiedzi tutaj dobrze przeanalizowac i pogrzebac


Wymyśliłem, że nie chce mi się.
PanamaJoe
No pisałeś, że cały serwis. Wygląda na BIG THING, żądaj milionów.
JU
To się tylko tak wydaje... A bezpieczeństwo? A RODO? A load balancer? A....... no i... "tylko baza, sesje" ;)
piotrpo
  • Rejestracja:ponad 7 lat
  • Ostatnio:4 dni
  • Postów:3277
5
  1. Jak ma się naprawdę skalować, to użycie mikroserwisów może być bardzo zasadne.
  2. Sesje bardzo utrudniają skalowanie. Dlatego warto dane sesji trzymać po stronie użytkownika. Wtedy wszystkie dane przychodzą z każdym żądaniem.
  3. Skalowanie instancji - zarządzalny k8s. Popatrz na GCP. Skalowanie node pool działa tam daleko lepiej niż w takim Azure (gdzie nie działa).
  4. Skalowanie podów - im mniejsze i lżejsze pody, tym szybciej się uruchamiają i tym mniejszy zapas instancji będziesz musiał mieć.
  5. Komunikacja pomiędzy usługami - warto pomyśleć o asynchroniczności z użyciem kolejek (tam gdzie to możliwe). Ktoś wrzuca nową aukcję, dane lądują w kolejce, następnie są przetwarzane przez osobną usługę/usługi i zapisywane na poziomie mikroserwisu.
  6. Szybki cache zapewni ci Redis. Mam na myśli scenariusz typu kilka instancji usługi do rejestrowania ofert potrzebuje wiedzieć, czy w danej aukcji została wrzucona jakaś nie przetworzona oferta. Używanie Redis do komunikacji pomiędzy różnymi typami usług jest błędem.
  7. Bazy danych dobieraj na poziomie mikroserwisów. Bazy NoSQL są mniej elastyczne, ale skalują się dużo bardziej niż jakieś postgresy, czy msql. Trzeba się zmierzyć z eventual consistency, ale skoro ma się skalować, to ciężko będzie od tego uciec.
  8. Wszystkie statyczne rzeczy powinny iść z CDNa

Wrzucasz trochę mało danych, żeby doradzać cos naprawdę szczegółowego. Nie piszesz nic o wymaganiach jakościowych, bezpieczeństwie, kosztach. Warto poczytać https://aws.amazon.com/blogs/apn/the-5-pillars-of-the-aws-well-architected-framework/

edytowany 1x, ostatnio: piotrpo
JU
Wspomniałeś o CDN, więc przy okazji zadam pytanie. Załóżmy, że mam na stronie 10 albo 100 obrazków. Jaka jest teraz faktycznie różnica, czy idą one z mojej strony, czy z CDN? (zakładam że mam przeciętny serwer współdzielony)
piotrpo
Taka, że transmisja obrazków, czy OPA nie obciąża twojego klastra. Serwer współdzielony to nie jest rozwiązanie poddające się skalowaniu.
PR
PR
  • Rejestracja:około 4 lata
  • Ostatnio:prawie 4 lata
  • Postów:204
0

NoSQL jest mniej elastyczne? Chyba wręcz przeciwnie.

KamilAdam
  • Rejestracja:ponad 6 lat
  • Ostatnio:2 dni
  • Lokalizacja:Silesia/Marki
  • Postów:5505
3
pragmaticdev napisał(a):

NoSQL jest mniej elastyczne? Chyba wręcz przeciwnie.

Zależy od której strony patrzysz. Przy pracy ReadOnly (np robienie raportów) SQL jest bardziej elastyczny bo możesz złączyć wszystko ze wszystkim (i zabić bazę dla dużych zbiorów danych). Przy NoSQLu często musisz sobie wcześniej zaplanować jakie złączenia będą ci potrzebne w przyszłości

BTW w osobnym wątku znów jest dyskusja PostgreSQL z JSONB kontra klasyczne NoSQLe. Ja wolę PostgreSQL z JSONB bo to już znam i używałem


Mama called me disappointment, Papa called me fat
Każdego eksperta można zastąpić backendowcem który ma się douczyć po godzinach. Tak zostałem ekspertem AI, Neo4j i Nest.js . Przez mianowanie
edytowany 2x, ostatnio: KamilAdam
piotrpo
  • Rejestracja:ponad 7 lat
  • Ostatnio:4 dni
  • Postów:3277
2

@pragmaticdev: W NoSQL nie masz możliwości łatwego wygenerowania raportu przekrojowego. Właściwie już na etapie projektowania zbioru danych musisz wiedzieć po czym będziesz te dane wyszukiwał. W przypadku SQL, masz jakąś strukturę typu OLTP, ale jak potrzebujesz raportowania, to nic wielkiego się nie stanie, poza potencjalnym zabiciem serwera, jeżeli zapytanie będzie mocno suboptymalne.

masterc
  • Rejestracja:około 4 lata
  • Ostatnio:około 3 lata
  • Postów:425
0

@piotrpo:

piotrpo napisał(a):
  1. Jak ma się naprawdę skalować, to użycie mikroserwisów może być bardzo zasadne.
  1. Sesje bardzo utrudniają skalowanie. Dlatego warto dane sesji trzymać po stronie użytkownika. Wtedy wszystkie dane przychodzą z każdym żądaniem.
  2. Skalowanie instancji - zarządzalny k8s. Popatrz na GCP. Skalowanie node pool działa tam daleko lepiej niż w takim Azure (gdzie nie działa).
  3. Skalowanie podów - im mniejsze i lżejsze pody, tym szybciej się uruchamiają i tym mniejszy zapas instancji będziesz musiał mieć.
  4. Komunikacja pomiędzy usługami - warto pomyśleć o asynchroniczności z użyciem kolejek (tam gdzie to możliwe). Ktoś wrzuca nową aukcję, dane lądują w kolejce, następnie są przetwarzane przez osobną usługę/usługi i zapisywane na poziomie mikroserwisu.
  5. Szybki cache zapewni ci Redis. Mam na myśli scenariusz typu kilka instancji usługi do rejestrowania ofert potrzebuje wiedzieć, czy w danej aukcji została wrzucona jakaś nie przetworzona oferta. Używanie Redis do komunikacji pomiędzy różnymi typami usług jest błędem.
  6. Bazy danych dobieraj na poziomie mikroserwisów. Bazy NoSQL są mniej elastyczne, ale skalują się dużo bardziej niż jakieś postgresy, czy msql. Trzeba się zmierzyć z eventual consistency, ale skoro ma się skalować, to ciężko będzie od tego uciec.
  7. Wszystkie statyczne rzeczy powinny iść z CDNa

Wrzucasz trochę mało danych, żeby doradzać cos naprawdę szczegółowego. Nie piszesz nic o wymaganiach jakościowych, bezpieczeństwie, kosztach. Warto poczytać https://aws.amazon.com/blogs/apn/the-5-pillars-of-the-aws-well-architected-framework/

  1. Sesje trzymane po stronie użytkownika odpadają bo są niebezpieczne to raz, a dwa zawsze pozostaje element pamiętania czy to sekwencji czy tokena po stronie serwera prawda ? Już nie mówię o wszelkich algorytmach szyfrujących dane sesyjne trzymane u klienta ale chociażby problem z powtórnym wysyłaniem danych. I sposobności na atak crypto validation prone to reply attack. Dlatego sesje będą w Redis.
  2. Tutaj redis bedzie na oddzielnym klastrze więc z utrzymaniem sesji i skalowaniem nie będzie problemu bo każda instancja będzie uzywać tej samej bazy
  3. Obadam tematy, bo każdy pisze co innego i każdy poleca akurat tę metodę, którą zna co nie znaczy że jest ona lepsza czy najlepsza
  4. Co to są pody ? iPody ?
  5. Kolejki sa obowiązkowe. Ponieważ baza z danymi będzie na kolejnej instancji tam będzie też właśnie kolejka, która będzie odciążać pewne procesy, jak na przykład dodawanie aukcji, wysyłki wiadomości, maili, generowanie dokumentów itd.
  6. Tak jak w sesjach Redis jest idealny do trzymania sesji i do obslugi cache
  7. Do aplikacji musze uzyc mysql czy tam oracle . NoSQL to baza typu klucz wartosc wiec nie nadaje sie do niczego relacyjnego.
  8. CDN zgadzam sie :)

Co do wymagań jakościowych czy bezpieczeństwa to ma to być serwer jak z lat 90. Lista przedmiotów, formularz dodawania / edycji, opcja podbij cene i to wszystko. Żadnych wodotrysków, żadnych cudów. Bezpieczeństwo na poziomie autentykaci więc zależne od użytkownika. Od mojej strony jak dam to na chmure to nie będe się martwił o aktualizacje serwerów, wszystko będzie po ich stronie także tutaj się nie martwię jakby. Dzięks za ciekawe punkty, dają do myslenia i trzeba jeszcze posiedzieć w papierach i poprojektować.


Wymyśliłem, że nie chce mi się.
masterc
Dzięks, zaraz zerkne ale to jakieś przerost treści nad formą nikt tego nie zna i nikt o tym nie słyszał, jedyne Pod to iPOD
SO
Bezpieczeństwo na poziomie autentykaci więc zależne od użytkownika. Raczej chodziło o bezpieczeństwo danych i całego systemu na wyższym poziomie :P Np. szyfrowanie danych własnym kluczem (a nie tylko zarządzanym przez dostawcę chmury), izolację, czy usługi (baza, redis itp. itd.) mogą być wystawione do internetu czy tylko wewnątrz vnetu no i jak wspomniane już niżej wszystkie mechanizmy HA, DR, RPO, RTO.
WY
WY
  • Rejestracja:ponad 7 lat
  • Ostatnio:prawie 4 lata
  • Postów:64
1

Lepiej żeby się jak najmniej skalował serwis, chyba że chcesz szybko zbankrutować.

masterc
to fakt ale to zalezy juz od ruchu i ludzi ilu bedzie :)
piotrpo
  • Rejestracja:ponad 7 lat
  • Ostatnio:4 dni
  • Postów:3277
1
masterc napisał(a):
  1. Sesje trzymane po stronie użytkownika odpadają bo są niebezpieczne to raz, a dwa zawsze pozostaje element pamiętania czy to sekwencji czy tokena po stronie serwera prawda ? Już nie mówię o wszelkich algorytmach szyfrujących dane sesyjne trzymane u klienta ale chociażby problem z powtórnym wysyłaniem danych. I sposobności na atak crypto validation prone to reply attack. Dlatego sesje będą w Redis.

Twoja decyzja, nie manie sesji znacznie ułatwia skalowanie. Serwer nie musi trzymać tokenu, żeby go potwierdzić - JWT

  1. Tutaj redis bedzie na oddzielnym klastrze więc z utrzymaniem sesji i skalowaniem nie będzie problemu bo każda instancja będzie uzywać tej samej bazy

Redis występuje jako usługa zarządzalna w każdej chmurze. Bez sensu stawiać własny klaster

  1. Co to są pody ? iPody ?

Instancja usługi w k8s. Pakujesz wszystkie usługi do kontenerów dockerowych, wrzucasz do zarządzalnego Kubernetesa w chmurze, ustawiasz limity budżetów i leci.

  1. Do aplikacji musze uzyc mysql czy tam oracle . NoSQL to baza typu klucz wartosc wiec nie nadaje sie do niczego relacyjnego.

Nie, klicz-wartość to tylko jedna z form NoSQL. Zobacz sobie co chmury oferują.

Co do wymagań jakościowych czy bezpieczeństwa to ma to być serwer jak z lat 90. Lista przedmiotów, formularz dodawania / edycji, opcja podbij cene i to wszystko. Żadnych wodotrysków, żadnych cudów. Bezpieczeństwo na poziomie autentykaci więc zależne od użytkownika. Od mojej strony jak dam to na chmure to nie będe się martwił o aktualizacje serwerów, wszystko będzie po ich stronie także tutaj się nie martwię jakby. Dzięks za ciekawe punkty, dają do myslenia i trzeba jeszcze posiedzieć w papierach i poprojektować.

No nie - co z HA, DR, jakie jest SLA, jakie masz RPO? Serwerami nie musisz się przejmować, o ile sam ich nie postawiłeś. Czyli dalej warto iść w usługi zarządzalne i nie stawiać żadnej własnej VM.

PR
PR
  • Rejestracja:około 4 lata
  • Ostatnio:prawie 4 lata
  • Postów:204
2

NoSQL to też bazy dokumentowe, a nie jedynie klucz-wartość. Spokojnie mogą przechowywać dane z relacjami. Tylko, że całą warstwa pilnowania relacji i spójności danych jest po stronie mikroserwisu. Bazy dokumentowe mają zaletę i wadę, że nie mają struktury - czyli wszystko przyjmą, nie wymagają migracji, ale zawsze może wpaść jakaś stara wybrakowana encją i wtedy serwis musi potrafić coś z tym zrobić.

No i dalej - dlaczego wy czepiacie się tak tych raportów? To nie lata 80-siąte, żeby trzymać jedną monolityczną i relacyjną bazę ;) Bazy serwisowe są małymi lekkimi bazkami dokumentowymi. Różne mechanizmu rzucania eventową propagują operacje z tych baz na inne bazy - np. jakąś relacyjną bazę, która spaja dane ze wszystkich mikroserwisów i służy do raportów. Potem analogicznie raz na jakiś czas eksportuje się bazy do hurtowni, gdzie liczą się agregaty na potrzeby analityki oraz kopania w danych. Ma to wiele zalet - można wprowadzać zmiany w serwisach, nie martwiąc się o migracje danych. Na raz możemy przechowywać różne typy dokumentów w kolekcji. Eksport do baz raportowych jest narzutem, ale przynajmniej żadne zapytanie nie zabije bazy produkcyjnej ;) Podobnie jest z bazami do hurtowni. Nie jest powiedziane, że jeden system ma mieć 1 bazę i to tylko jednego typu. Tym bardziej rozwiązania chmurowe mają wiele baz dla różnych zastosowań.

piotrpo
  • Rejestracja:ponad 7 lat
  • Ostatnio:4 dni
  • Postów:3277
0

@pragmaticdev: Problem w tym, że mając wszystkie dane w jakimś MySQL jak przyjdzie ci zrobić zestawienie typu "wszystkie aktywne aukcje w kategorii x, otwarte w ciągu ostatnich 3 dni, o cenie wywoławczej powyżej y", to zrobisz to w 5 minut. Może zajedziesz serwer, ale zrobisz. W przypadku baz NoSQL już masz pod górkę, bo musisz mieć jakiś indeks, po którym wyciągniesz dokumenty, później musisz te dokumenty ręcznie przefiltrować i zagregować. Możesz też przygotować jakieś rozwiązanie pod analitykę, ale też trzeba to zrobić. I nie twierdzę, że NoSQL to zło. To w większości przypadków bardzo fajne i naturalne rozwiązanie, tylko tez ma swoje ograniczenia. Oprócz baz dokumentowych i KV, masz też bazy obiektowe - wrzucasz sobie obiekt w JSON, definiujesz na których polach chcesz indeksy i zapis, wyszukanie i pobranie pojedynczego obiektu chodzi lepiej niż w jakiejkolwiek relacyjnej bazie. We wspomnianym GCP był np. Google Cloud Datastore. Teraz jest to któreś z rozwiązań brandowanych jako Firebase. Oczywiście to co piszesz jest prawdą - jak masz system działający w sieci, to celem podstawowym jest, żeby działał, więc eksport (czy podwójny zapis) do bazy analitycznej ma sens.

masterc
  • Rejestracja:około 4 lata
  • Ostatnio:około 3 lata
  • Postów:425
0

@piotrpo:

Twoja decyzja, nie manie sesji znacznie ułatwia skalowanie. Serwer nie musi trzymać tokenu, żeby go potwierdzić - JWT

A jak poradzic sobie z powtornym wyslaniem danych ?


Wymyśliłem, że nie chce mi się.
edytowany 1x, ostatnio: masterc
piotrpo
Nie rozumiem pytania. Jakie powtórne wysłanie danych?
masterc
Wysyłasz requesta z danymi ze swoja sesja i z jakimis danymi. Nie czekasz na odpowiedz tylko wysylasz za sekunde to samo lub szybciej. Jak sprawisz ze system rozpozna ze taki request juz byl wczesniej wyslany i nie pozowli drugi raz go zaakceptowac. Jak to zrobic ?
piotrpo
Nie robisz tego, sprawdzasz, czy request jest, lub nie jest dopuszczalny w aktualnym stanie systemu - np. ktos składa ofertę, za pierwszym razem może ją złożyć, a za drugim już nie, bo cena jest za niska w stosunku do aktualnej. Zwracasz HTTP409 i wszystko.
masterc
No do ceny to tak ale mowie o dowolnym blokowaniu tego samego requesta. Jak to zablokujesz ? obojetne np edycja danych jak zablokujesz powtorne wysylanie danych jesli sesja jest po stronie klienta ?
S9
  • Rejestracja:ponad 4 lata
  • Ostatnio:około 2 lata
  • Lokalizacja:Warszawa
  • Postów:1092
5

@masterc: napiszę ponownie - to jest jakiś nowy produkt, kolejna "genialna idea", jesteś jakims architektem w polskim software house który takie coś tworzy czy co? No bo jednak najpierw wypada miec jakiś klientów, jakąś logike biznesową i pod to dobierać bazy danych (a nie odwrotnie).


ZI
  • Rejestracja:ponad 4 lata
  • Ostatnio:ponad 3 lata
  • Postów:208
2

Tak jeszcze abstrahując od problemu - warto zwrócić uwagę że np taki StackOverflow wcale nie potrzebuje pod spodem niczego zbyt fancy (w kwestii architektury), taki klasyczny CDN + LB + web tier + RDBMS na dane, elastic do searcha, redis jako cache/pub-sub. W sumie robi prawie to samo co taki serwis aukcyjny:

  • wystawienie pytania to aukcja
  • łapka w górę/dół to prawie jak bid
  • tagi to kategorie

Wszystko mieści się w kilku rackach (albo mieściło się): https://nickcraver.com/blog/2016/02/17/stack-overflow-the-architecture-2016-edition/

PR
PR
  • Rejestracja:około 4 lata
  • Ostatnio:prawie 4 lata
  • Postów:204
1

Bez przesady jak post zakręci się na synchronizacji lub baza przymuli to nic sienie stanie. Jak aukcje wygrają dwie osoby to już tak. Tracimy energię- bez założeń biznesowych i analizy domeny można powiedzieć - to zależy i to będzie najmniej kłamliwa odpowiedz.

Charles_Ray
  • Rejestracja:około 17 lat
  • Ostatnio:około 2 godziny
  • Postów:1873
2

Muszę napisać projekt taki jak ebay, prosty system aukcyjny. Tylko że ma być skalowalny żeby mógł obsłużyć miliony osób. Czego użyć do takiego projektu ?

Jakiś frontend, jakiś backend, baza danych i lecisz


”Engineering is easy. People are hard.” Bill Coughran
masterc
  • Rejestracja:około 4 lata
  • Ostatnio:około 3 lata
  • Postów:425
0

Biore sie za robote, powroce jak bede mial dzialajaca lokalnie apliakcje


Wymyśliłem, że nie chce mi się.
masterc
  • Rejestracja:około 4 lata
  • Ostatnio:około 3 lata
  • Postów:425
0
Aleksander32 napisał(a):

@masterc: napiszę ponownie - to jest jakiś nowy produkt, kolejna "genialna idea", jesteś jakims architektem w polskim software house który takie coś tworzy czy co? No bo jednak najpierw wypada miec jakiś klientów, jakąś logike biznesową i pod to dobierać bazy danych (a nie odwrotnie).

Tak tylko piszą ludzie, którzy maja pomysl ale nigdy go nie zrealizuja, ja nie mysle o biznesie , logice czy klientach. Kocham tworzyc i chce to stworzyc. Co sie stanie ? 1. projekt nauczy mnie doswiadczenia. Ta dyskusja juz mi wiele dala do nauki kolejnych rzeczy, 2. zyskam wiedze na temat jak mozna zrealziwoac tak duze serwisy. 3. program moze zaskoczyc i bedzie milion klientow a wtedy go sprzedam.
Nie ma tu miejsca na przegraną, no chyba ze sie poddam to wtedy przegram.


Wymyśliłem, że nie chce mi się.
PR
PR
  • Rejestracja:około 4 lata
  • Ostatnio:prawie 4 lata
  • Postów:204
2

Jak będziesz interesował się chmurami to pomyśl o podejściu Cloud agnostic - czyli system chmurowy rozproszony, ale tak zrobiony, żeby uniezależnić się od platformy. Czyli zamiast cloudformation inwestować w Terraformę, zamiast SQS dać RabbitMQ etc. etc. Oczywiście pewnie coś tam zawsze będzie platform specyfic ale warto jak najwięcej rzeczy robić na pewnej wyższej formie abstrakcji. Dodatkowo warto dbać by całość była łatwa do postawienia na lokalu, bo praca wspólna jest czasem upierdliwą, a z czasem okazuje się, że bez devopa nie zdebuggujesz lokalnie pewnych scenariuszy systemu.

masterc
koncowe rzeczy znam ale nie znam tego cloud agnostic i rabiita i sqs chyba tez nie. Jutro do tego siade
piotrpo
Moje doświadczenie - trzeba mieć naprawdę solidne uzasadnienie biznesowe do podejścia cloud agnostic. Wiąże się to z dużymi kosztami/ograniczeniami.
PR
pragmaticdev
Jak nie chcesz być przyspawany do AWS czy Azura to warto zainwestować. Chociaż do większości projektów AWS będzie wystarczający i najtańszy.
PR
pragmaticdev
Ale jak już wspominałem - na tym etapie nic nie można na pewno powiedzieć, a coś mi się wydaje, że sam autor nie zna dokładnie celów swojego projektu ;)
piotrpo
Budowa systemu z wymaganiem cloud agnostic trwa dłużej i wymaga większego wysiłku przy utrzymaniu. Uniezależnienie od chmury, to wartość dodana. Pytanie jaki jest bilans. Różnice kosztów chmur są na poziomie ~20%, do większości projektów każda się nada (z tych dużych). Jeżeli nie ma dodatkowych wymagań typu uruchamianie na prywatnej infrastrukturze, to za bardzo nie ma się co tym przejmować. Lepiej napisać usługi tak, żeby łatwo było je przepiąć na inne kolejki, czy blob storage niż od razu iść w tę stronę.
piotrpo
  • Rejestracja:ponad 7 lat
  • Ostatnio:4 dni
  • Postów:3277
1

@masterc:

No do ceny to tak ale mowie o dowolnym blokowaniu tego samego requesta. Jak to zablokujesz ? obojetne np edycja danych jak zablokujesz powtorne wysylanie danych jesli sesja jest po stronie klienta ?

Musisz sobie stworzyć sekwencję requestów, która zabezpieczy cię przed biznesowo błędnym przebiegiem wydarzeń. Czyli np.

Kopiuj
-> GET ./documents/123/lock-code
<- lock
-> POST /document/123
{
"lock-code" = "lock"
"document"="....."
}

Jak dokument jest już zablokowany, to na pierwsze żądanie zwracasz błąd, jak ktoś próbuje wysłać dokument bez wcześniejszego lock / z błędnym lock-code, to też odrzucasz.

masterc
A jak ktos tez powinien moc sciagnac dokuent ale ma na niego lock to kiedy ten dokument bedzie odblokowany ? Powiedzmy ze ja wysylam get document, syste mi go daje i blokuje. ja go mam na dysku i juz nic dalej nie robie. A kolega na kompie obok chce ten sam dokument ale on jest juz na cale zycie zablokowany. To jak go odblokowac ?
piotrpo
A skąd mam wiedzieć? To zależy od założeń. Możesz mieć limit na blokadę dokumentu i go odnawiać, albo wymagać ręcznego zwolnienia tego zasobu. Albo nie blokować wcale i skupić się na rozwiązywaniu konfliktów pomiędzy edycjami.
masterc
Nie da się, dlatego sesja po stronie klienta nie ma sensu bo i tak musisz miec cos po stronie serwera.
jurek1980
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 4 godziny
  • Postów:3462
4

Zobacz sobie Spryker marketplace
https://spryker.com/en/
Ma większość rzeczy jakie potrzebujesz dostęp do kodu jest i możesz przejrzeć tam implementację elastic, redisa itd.

masterc
Dzieks zaraz zerkne
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)