рдЖрдк рдЗрд╕ рдЧрд╛рдЗрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЬрд╛рд╡рд╛ рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрд╡рд┐рд╕ рдХреНрдпрд╛ рд╣реИрдВ, рдЖрдк рдЙрдиреНрд╣реЗрдВ рдХреИрд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рдФрд░ рдмрдирд╛рдПрдВрдЧреЗред рдФрд░ рдЬрд╛рд╡рд╛ рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрд╡рд┐рд╕реЗрдЬ рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЕрд╡рд▓реЛрдХрди рднреА рдХрд░реЗрдВред
рдиреЛрдЯ: ~ 7000 рд╢рдмреНрджреЛрдВ рдХрд╛ рдПрдХ рд▓реЗрдЦ рд╢рд╛рдпрдж рдореЛрдмрд╛рдЗрд▓ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдкрдврд╝рдиреЗ рд▓рд╛рдпрдХ рдирд╣реАрдВ рд╣реИред рдЗрд╕реЗ рдмреБрдХрдорд╛рд░реНрдХ рдХрд░реЗрдВ рдФрд░ рдмрд╛рдж рдореЗрдВ рд╡рд╛рдкрд╕ рдЖрдПрдВред
рд╕рд╛рдордЧреНрд░реА
Java microservices рдХреА рдореВрд▓ рдмрд╛рддреЗрдВ
рдЬрд╛рд╡рд╛ рдорд╛рдЗрдХреНрд░реЛрд╕рд┐рд╕реНрдЯрд░реНрд╕ рдХрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡рд┐рдЪрд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдмрд╣реБрдд рд╣реА рдореВрд▓ рдмрд╛рддреЗрдВ рд╕реЗ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ: рдЬрд╛рд╡рд╛ рдореЗрдВ рдХреБрдЦреНрдпрд╛рдд рдореЛрдиреЛрд▓рд┐рде, рдпрд╣ рдХреНрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рдлрд╛рдпрджреЗ рдпрд╛ рдиреБрдХрд╕рд╛рди рдХреНрдпрд╛ рд╣реИрдВред
рдЬрд╛рд╡рд╛ рдореЛрдиреЛрд▓рд┐рде рдХреНрдпрд╛ рд╣реИ?
рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдХрд┐ рдЖрдк рдмреИрдВрдХ рдпрд╛ рдлрд┐рдирдЯреЗрдХ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЖрдк рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдПрдХ рдореЛрдмрд╛рдЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡реЗ рдПрдХ рдирдпрд╛ рдмреИрдВрдХ рдЦрд╛рддрд╛ рдЦреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕ рдЬрд╛рд╡рд╛ рдХреЛрдб рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рдпрдВрддреНрд░рдХ рд╡рд░реНрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬреЛ рд╕рд░рд▓реАрдХреГрдд рд░реВрдк рд╕реЗ , рдиреАрдЪреЗ рджрд┐рдЦрд╛рдП рдЧрдП рдЬреИрд╕реЗ рдХреБрдЫ рджрд┐рдЦрддрд╛ рд╣реИред
@Controller
class BankController {
@PostMapping("/users/register")
public void register(RegistrationForm form) {
validate(form);
riskCheck(form);
openBankAccount(form);
}
}
рдХреНрдпрд╛ рдЖрдк рдХрд░рдирд╛ рдпрд╣ рдЪрд╛рд╣рддреЗ рд╣реИрдВ:
- рдкрдВрдЬреАрдХрд░рдг рдлреЙрд░реНрдо рдХреЛ рдорд╛рдиреНрдп рдХрд░реЗрдВред
- рдпрд╣ рддрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдкрддреЗ рдкрд░ рдЬреЛрдЦрд┐рдо рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВ рдХрд┐ рдЖрдк рдЙрд╕рдХреЗ рд▓рд┐рдП рдмреИрдВрдХ рдЦрд╛рддрд╛ рдЦреЛрд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВред
- рдмреИрдВрдХ рдЦрд╛рддрд╛ рдЦреЛрд▓реЗрдВ
BankController bank.jar bank.war : , , . ( .jar / .war 1-100 ).
.jar тАФ , Java.

Java ?
, Java . , :
- / / ...
- тАж
- тАФ ...
bank.jar , .
Java?
, . bank.jar JVM, . .
: ┬л , Mono (lithic) Bank, , , , Java.
Java?
, riskCheck() BankController / bean- Maven / Gradle, . .
RiskCheck , , ( ).
- , 5-7 ?
- 100 1000 ?
- - ?
, , :
- тАФ .
- , .
, : JVM, . JVM RiskCheck, JVM. .
?
Java ?
, : .
HTTP/REST
HTTP REST- , XML JSON тАФ (, , Google Protocol Buffers).
REST-, , , : , .
Java REST?
JMS / , AMQP. , / SMTP.
, , , ┬л ┬╗, -, , , - .
Java?
: REST API Java
, , Java . , , HTTP-.
@Controller
class BankController {
@Autowired
private HttpClient httpClient;
@PostMapping("/users/register")
public void register(RegistrationForm form) {
validate(form);
httpClient.send(riskRequest, responseHandler());
setupAccount(form);
}
}
, , Java () : RiskCheck. JVM, . :

, Java Microservices: ( .jar .war) .
: ? ? ?
.
Java
. , .
тАФ . , ┬л┬╗ , тАФ .
.
:
. :
- / / .
- , , , , , .
- , : , .
, Java- тАФ .
- , ┬л ┬╗, , , , .
- ┬л ┬╗, .
- , PDF .
: -
UML- , . , , . ?
, , , , ().
, , , 7- Hibernate , , , .
, ? , , .
@simonbrown Twitter:
тАж , .
I'll keep saying thisтАж if people can't build monoliths properly, microservices won't help.
Simon Brown
Java. , :
- , .
- , .
- : : , (: agile :) )
, Java .
, . Hadi Hariri (https://twitter.com/hhariri) ┬лExtract Microservice┬╗ IntelliJ.

, , , , .
@Service
class UserService {
public void register(User user) {
String email = user.getEmail();
String username = email.substring(0, email.indexOf("@"));
}
}
Java
@Service
class UserService {
@Autowired
private HttpClient client;
public void register(User user) {
String email = user.getEmail();
String username = httpClient.send(substringRequest(email), responseHandler());
}
}
, , , Java HTTP, . , , : Java.
: .
, workflow ( )
Java .
: , () , CRM .
, , , XML.
XML- ():
- , XML
- : 1- ?
- XML
- XML ,
- , ┬л ┬╗ ┬л, тАФ ┬╗
, .
. , , RabbitMQ, .

, , , :
- XML-?
- ? ? API?
- , ? ?
- (, , ), , ?
- / .
, , , . :

, , .
...
- , .
- , , , .
- , , .
- , (. Java ?).
- , тАФ .
:
:
- Netflix ( ) ...
- , , Chaos Monkey, , 5 .
- , @monzo 1500 , .
тЖТ .
. .:
Chaos Monkey тАФ Netflix stateless- тАФ - . Chaos Monkey , .
.
тАФ . (, ) , ( XML, XML, XML).
, , Java , , . .
, DevOps / / .
-
, : ( : ).
, XML Java, Haskell ( ), Erlang ( :) ).
, ( ), , , : .
, , Haskell , .
: . Fortune 500 Spring, ┬л ┬╗. тАФ , .
: , . : Kotlin Java ( JVM 100% ), Haskell Java.
Java
, . Java-, , тАФ .jar / .war.
Java, , , JVM: Java , , , Java, JVM).
, , Docker, Kubernetes The Cloud. ? :
Java
, monobank.jar () riskengine.jar ( ).
, , , .properties, URL .
, , :
-r-r------ 1 ubuntu ubuntu 2476 Nov 26 09:41 application.properties
-r-x------ 1 ubuntu ubuntu 94806861 Nov 26 09:45 monobank-384.jar
ubuntu@somemachine:/var/www/www.monobank.com/java$ java -jar monobank-384.jar
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
...
-r-r------ 1 ubuntu ubuntu 2476 Nov 26 09:41 application.properties
-r-x------ 1 ubuntu ubuntu 94806861 Nov 26 09:45 risk-engine-1.jar
ubuntu@someothermachine:/var/www/risk.monobank.com/java$ java -jar risk-engine-1.jar
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
...
: .properties .jar ?
, .
, SSH Ansible Java
, Java- тАФ , Java- 20 . :
- (Maven, Gradle)
- SSH / SCP .jars
- Bash
- : Ansible.
┬л┬╗ , chaos monkeys, , , ZooKeeper , .
, , .
Docker Java
. Docker .
, , :

, JVM . JVM.zip Raspberry Pi ( ), .jar.
, PHP Python, .
, Java- ( ): , Postgres, , Redis.
, Docker Java, Java, :
- , Testcontainers.
- "" . Discourse. Docker , , : Discourse, Ruby, Postgres, Redis.
Oracle , Docker.
, , .jar, :
Docker Swarm Kubernetes Java
, Docker. , Java, Docker, .jar. Java, : .
: , Docker, , , (brrrr)?
тАФ Docker Swarm Kubernetes.
, : , YAML (. : Yaml) . , , .
, Java :
- Docker Swarm / Kubernetes
- YAML,
.
Java
, , n- ? , , ?
:
- ( , Spring Boot), Wrapper.java тАФ , . .
- Docker Swarm Kubernetes .
- . DEV / TEST. , , .
, Java , , (, ActiveMQ RabbitMQ) , , , Java .
DevOps. Microservice Testing Libraries, .
, :
Java
, Java, , .
Java ?
, JVM
.
( , JVM ), .
, : , .
, , BillingService.
HTTP / REST
, . , - PDF.
, HTTP. ( , PDF . .)
@Service
class BillingService {
@Autowired
private HttpClient client;
public void bill(User user, Plan plan) {
Invoice invoice = createInvoice(user, plan);
httpClient.send(invoiceRequest(user.getEmail(), invoice), responseHandler());
}
}
, HTTP-. , :
- : , .
- DELAYED: , .
- ERROR: , , .
, , . , API, .
Chaos Monkey, , , , .
тАФ . , , 50 10 . , , BillingService . , .
, , , , , , (, , , )
, , Hystrix Netflix. , .
. BillingService , , Spring RabbitMQ .
, RabbitMQ, , . PDF .
@Service
class BillingService {
@Autowired
private RabbitTemplate rabbitTemplate;
public void bill(User user, Plan plan) {
Invoice invoice = createInvoice(user, plan);
rabbitTemplate.convertAndSend(exchange, routingkey, invoice);
}
}
, OK ERROR, HTTP-. :
- ? ? ( -).
- ? ? ( ).
- : ┬л / ┬╗ ┬л ?┬╗ ( -).
, . , , . :
- JMS, ActiveMQ, (XA) .
- RabbitMQ, , , , .
- - , , ActiveMQ RabbitMQ , Docker.
Java- ?
-, , Spring Boot, .jar, -, Tomcat Jetty, . .
, , , Kubernetes GraalVM, .
: Quarkus, Micronaut, Vert.x, Helidon.
, , , , :
Spring Boot, , , , , Spring Boot .
, , , , , , - , , 50 .
, , , () ┬л ┬╗ , , , , .
.
:
- ORM .
- .
- , ( , Hibernate), .
(, , , DevOps, ) , hello world. , , , JRebel DCEVM.
(Simon Brown): ( ) , ( ) тАФ .
, .
REST Java?
HTTP REST API. , , HTTP:
Http Java ( Java 11), Http Apache OkHttp.
, ┬л┬╗, , JAX-RS WebSocket.
, HTTP-, HTTP- . OpenFeign .
Java?
, , , ActiveMQ (Classic Artemis), RabbitMQ Kafka. , .
:
- ActiveMQ RabbitMQ , . .
- ActiveMQ ( ), RabbitMQ / Docker / TestContainer.
- Kafka . , ┬л┬╗ ( ), .
, RabbitMQ ( ) Kafka, Pivotal .
, , . , - , RabbitMQ ActiveMQ.
, RabbitMQ , 20-30K . Kafka 100K . , , .
: Alibaba Group, , ( ) . , тАФ 99% - Java.
.
?
Spring ( Spring) - Arquillian ( JavaEE).
Docker Testcontainers, , , Oracle , .
HTTP-, Wiremock. (ActiveMQ) (RabbitMQ), Awaitility DSL.
, ┬л┬╗, Junit, TestNG AssertJ Mockito.
, , , , .
Java?
тАФ . , , less grep, n тАФ , .
. , ┬л ┬╗ .
:
?
, , IPS. . , [ip = 192.168.200.1] , [ip = 192.168.200.2], .
:
- application.properties , , .
- (, Amazon EC2 IP-, - ┬л┬╗ ), , , , , ┬л┬╗ , IP .
- , , , : , , , , ? , ? ?
, , .
, Eureka Zookeeper, ┬л┬╗ , , , , . , .
, - ZooKeeper.
Java?
, . , HTTPS Oauth2 .
, ?
, , . Docker / Testcontainers, / Ansible.
.
: Yaml
, Yaml. , ┬л ┬╗. , Ansible, Kubernetes.
┬л┬╗ YAML, Ansible , , , IDE. , .
Yaml:
- is:
- so
- great
? ? ?
, . , .
Java, , . , .
, , . ?
, - . - n .
, - Java-IoT. , , . ..
, , , , ┬л ┬╗. , - domain driven design , , ┬л ┬╗ , , , .
n ( ) ┬л ┬╗ , .

( (!)) , :
. 10 , , , . .
. .
, , :
, () , , . (.. ).
, .
, 20 ( ) 20 . , - 400 Hibernate .
: , .
, , , .
: Java- , , .
, , (, , ), , .
, , :
@Controller
class LoginController {
@PostMapping("/login")
public boolean login(String username, String password) {
User user = userDao.findByUserName(username);
if (user == null) {
return false;
}
if (!user.getPassword().equals(hashed(password))) {
return false;
}
return true;
}
}
(, , ): , ┬л┬╗ UserStateChanged тАФ - -.
Java , UserStateChanged Erlang. - - , Steve Yegge , , Google.
, , - .
? .
, .
, , , , [95: login-101: updateUserProfile].
, , , - тАФ .
, , .
: . , , , : , .
тДЦ 47?
? ?
?
Erlang , ?
, ! ?
, , DevOps, , , , . , .
, , . тАФ , .
Java- тАФ . тАФ - Maven . .
, , Maven, .
, DevOps (, Ansible Heroku ), .
Java . . , - ( ), .
Siva Prasad Reddy ( ) :
, , 70% 30% -.
Java?
, , Google . , , -, , .
, Java, Hetzner. , Hetzner.
, Java- , , , (<10).
рдЖрдкрдХреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рд░реНрд╡рд░ рдкрд░ рдЖрдкрдХреЗ рдЬрд╛рд╡рд╛ рдореЛрдиреЛрд▓рд┐рде (рдХрдиреЗрдХреНрд╢рди рдкреВрд▓) рдХрд┐рддрдиреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдХрдиреЗрдХреНрд╢рди рдЦреЛрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП?
рдХреНрдпреЛрдВ? рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдХрд┐рддрдиреЗ рд╕рдХреНрд░рд┐рдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ (рд▓рдЧрднрдЧ) рдЖрдкрдХреЗ рдореЛрдиреЛрд▓рд┐рде рдХреЛ рд╕реНрдХреЗрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?
рдЙрддреНрддрд░
рдЯрд┐рдкреНрдкрдгреА рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдЗрди рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рдЕрдкрдиреЗ рдЬрд╡рд╛рдм рдЫреЛрдбрд╝ рджреЗрдВред рдореИрдВ рд╕рднреА рдЙрддреНрддрд░реЛрдВ рдХреЗ рд▓рд┐рдП рддрддреНрдкрд░ рд╣реВрдВред
рдЕрдм рдЕрдкрдиреА рдкрд╕рдВрдж рдЦреБрдж рдмрдирд╛рдУ
рдпрджрд┐ рдЖрдк рдЕрднреА рднреА рдпрд╣рд╛рдБ рдореЗрд░реЗ рд╕рд╛рде рд╣реИрдВ: рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!