Что рассмотрим:
Пишем «с нуля» несколько вариантов SOCKS4/5 proxy server на блокирующий сокетах (java.net), неблокирующих синхронных (java.nio, Java 1.4.2+), неблокирующих асинхронных (java.nio, Java 7+). Используем паттерны Thread-per-Request, Thread-per-Connection, Reactor, Proactor, Asynchronous Completion Token, Half-Sync/Half-Async. Попутно рассмотрим ряд многопоточных паттернов, выделение памяти за пределами java heap, цену многопоточности (context switch, «остывание» кэша), Staged Event-Driven Architecture (SEDA), Netty framework, взаимодействие NIO и SSL/TLS и много другого.
Цель — разобраться в Java как платформе для сетевых High-Scalable / High-Throughput / Low-Latency серверов.
Почему SOCKS4/5 proxy server? Один из простейших в реализации сетевых протоколов требующих поддержки большого количества одновременно открытых TCP-соединений. Для демонстрации работоспособности легко использовать любой броузер с поддержкой SOCKS-proxy.
Альтернативами могли бы быть — HTTP 1.1 сервер ориентированный на поддержку большого количества Connection: keep-alive соединений (для COMET-ориентированных клиентов), чат-сервер, игровые сервера для MMORPG, сервер для поддержки HTML 5 WebSocket, сервер раздачи потокового аудио/видео. В любом из случаев речь идет о поддержке порядка 10.000 параллельных клиентов.
Об авторе:
Головач Иван — 30 лет, Java Coding Architect, опыт работы как в стартапах так и в компании из Кремниевой Долины, лучший студент Украины в области прикладной математики 2002 года, лучший студент Харьковского Политеха в области прикладной математики все время обучения1. Patterns
— Reactor [www.dre.vanderbilt.edu/...t/PDF/reactor-siemens.pdf]
— Proactor [www.cs.wustl.edu/...~schmidt/PDF/proactor.pdf]
— Asynchronous Completion Token (ACT) [www.cs.wustl.edu/~schmidt/PDF/ACT.pdf]
— Half-Sync/Half-Async [www.cs.wustl.edu/~schmidt/PDF/PLoP-95.pdf]
— Patterns for Concurrent and Networked Objects (POSA, Volume 2) [www.amazon.com/...Concurrent/dp/0471606952]
— Patterns for Concurrent, Parallel, and Distributed Systems [www.cs.wustl.edu/...schmidt/patterns-ace.html]
2. Code examples in Java
— Doug Lea Reactor realization [gee.cs.oswego.edu/dl/cpjslides/nio.pdf]
— Reactor vs Proactor [www.artima.com/...s/io_design_patterns.html]
— Orderly Versus Abortive Connection Release in Java [docs.oracle.com/...s/connection_release.html]
— Sun/Oracle site [docs.oracle.com/...ocs/technotes/guides/net]
3. Network/multithreading books / articles
— The C10K problem [www.kegel.com/c10k.html]
— Java Concurrency in Practice [www.amazon.com/...rian-Goetz/dp/0321349601]
— TCP/IP Illustrated, Volume 1: The Protocols [www.amazon.com/...ofessional/dp/0321336313]
4. IO vs NIO discussion
— Thousands of Threads and Blocking I/O [www.mailinator.com/...tymaPaulMultithreaded.pdf]
— Thread per connection : NIO, Linux NPTL and epoll [www.theserverside.com/...hread.tss?thread_id=26700]
— C10k на разных языках/платформах [habrahabr.ru/post/145796]
Регистрациая: +1 в комментариях здесь.
90 коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарів