Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Klienty HTTP: bohaterowie systemów rozproszonych

Klienty HTTP: bohaterowie systemów rozproszonych

Prezentacja z Confitura 2017

Adam Dubiel

July 01, 2017
Tweet

More Decks by Adam Dubiel

Other Decks in Programming

Transcript

  1. Klienci HTTP których znamy RestTemplate restTemplate = new RestTemplate(); Client

    client = ClientBuilder.newBuilder().build(); AsyncRestTemplate asyncRestTemplate = new AsyncRestTemplate(); Retrofit retrofit = new Retrofit.Builder() .baseUrl("https://api.github.com/") .build();
  2. Klienci dyskutujemy HTTP których o async.getForEntity("https://allegro.pl",Map.class).addCallback( { ResponseEntity<Map> result ->

    /* success! */ }, { Throwable ex -> /* failure :( */ } ) jersey.target("https://allegro.pl").request().async().get();
  3. We need to go deeper RestTemplate.getForEntity -> RestTemplate.doExecute -> HttpAccessor.createRequest

    -> ClientHttpRequestFactory.createRequest -> SimpleClientHttpRequestFactory -> URL.openConnection -> HttpURLConnection
  4. We need to go deeper Client.get -> JerseyInvocation.invoke -> ClientRuntime.invoke

    -> Connector.apply -> HttpUrlConnector._apply -> DefaultConnectionFactory.getConnection -> URL.openConnection() -> HttpURLConnection
  5. Async all the things AsyncRestTemplate.getForEntity -> AsyncRestTemplate.doExecute -> AsyncHttpAccessor.createAsyncRequest ->

    AsyncClientHttpRequestFactory.createAsyncRequest -> ... -> ... -> HttpURLConnection
  6. Wróćmy do korzeni The network is reliable. Latency is zero.

    Bandwidth is infinite. The network is secure. Topology doesn't change. There is one administrator. Transport cost is zero. The network is homogeneous.
  7. Fallacies of distributed computing The network is reliable. Latency is

    zero. Bandwidth is infinite. The network is secure. Topology doesn't change. There is one administrator. Transport cost is zero. The network is homogeneous.
  8. Latency is zero Czy opóźnienia są zerowe? To kiedy muszę

    czekać? A mogę nie czekać na połączenia? Ke? Nie Przy zestawianiu połączenia i każdym requescie Użyj puli połączeń
  9. Koszt połączenia conn request / response conn request / response

    conn request / response conn request / response
  10. Fallacies of distributed computing The network is reliable. Latency is

    zero. Bandwidth is infinite. The network is secure. Topology doesn't change. There is one administrator. Transport cost is zero. The network is homogeneous.
  11. Connection timeout ograniczenie czasu potrzebnego na nawiązanie połączenia default zależy

    od systemu (mierzone w dziesiątkach sekund) zdrowy default: 200ms (ale zmierz, zanim to ustawisz!)
  12. Socket/read timeout conn request / response request response response o,

    dane lecą ej, dajcie resztę! a gdzie reszta?
  13. Socket read/timeout czas pomiędzy odebraniem kolejnych paczek danych default zależy

    od systemu (mierzone w sekundach) docelowe ustawienie zależy od czasu odpowiedzi poszczególnych zależności
  14. Wybierając implementację, pytaj czy mam jakąś pulę połączeń i jaki

    jest jej rozmiar? jakie mam timeouty? jaki jest model wątków?
  15. Wybierając API, pytaj na jakim wątku działa mój kod? jak

    duża jest pula wątków? jak mogę ją kontrolować?
  16. Wybierając klienta HTTP, pytaj czy mam jakąś pulę połączeń i

    jaki jest jej rozmiar? jakie mam timeouty? jaki jest model wątków? na jakim wątku działa mój kod? jak duża jest pula wątków? jak mogę ją kontrolować?
  17. Wybierając klienta HTTP, pytaj czy mam jakąś pulę połączeń i

    jaki jest jej rozmiar? jakie mam timeouty? jaki jest model wątków? na jakim wątku działa mój kod? jak duża jest pula wątków? jak mogę ją kontrolować?