يمكنك استخدام هذا الدليل لفهم ما هي خدمات Java الدقيقة ، وكيف ستقوم بتطويرها وإنشائها. وأيضا الحصول على لمحة عامة عن المكتبات لتطوير الخدمات المصغرة Java.
ملاحظة: من المحتمل أن مقالة تحتوي على 7000 كلمة لا تستحق القراءة على جهاز محمول. ضع إشارة مرجعية عليه وعد لاحقًا
المحتوى
أساسيات الخدمات المصغرة Java
للحصول على فكرة حقيقية عن خدمات Java المصغرة ، من المنطقي أن نبدأ بالأساسيات الأساسية: monolith سيئة السمعة في Java ، ما هي وما هي مزاياها أو عيوبها.
ما هو مترابط Java؟
تخيل أنك تعمل في بنك أو شركة ناشئة في مجال التكنولوجيا المالية. تزود المستخدمين بتطبيق جوال يمكنهم استخدامه لفتح حساب مصرفي جديد.
يتطلب هذا الرمز جافا فئة تحكم، والتي، simplifiedly ، يبدو شيء من هذا القبيل واحد هو مبين أدناه.
@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).
كم عدد اتصالات قاعدة البيانات التي يجب أن تفتحها وحدة تجميع Java (مجموعة الاتصال) على خادم قاعدة البيانات؟
لماذا ا؟ كم عدد المستخدمين النشطين الذين يمكنهم (تقريبًا) قياس الحجم المترابط الخاص بك في نفس الوقت؟
إجابة
اترك إجابتك على هذه الأسئلة في قسم التعليقات. إنني أتطلع إلى جميع الإجابات.
الآن قم باختيارك بنفسك
إذا كنت لا تزال هنا معي: شكرًا للقراءة!