Skip to content

Commit 2a51a84

Browse files
Merge branch 'dev' into issue-#23616
2 parents 30bb18b + 1d54599 commit 2a51a84

File tree

57 files changed

+1566
-1346
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

57 files changed

+1566
-1346
lines changed

abp_io/AbpIoLocalization/AbpIoLocalization/Base/Localization/Resources/en.json

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,9 @@
228228
"Articles": "Articles",
229229
"Organizations": "Organizations",
230230
"ManageAccount": "Manage Account",
231+
"MyManageAccount": "My Account",
231232
"CommunityProfile": "Community Profile",
233+
"MyCommunityProfile": "My Community Profile",
232234
"BlogProfile": "Blog Profile",
233235
"Tickets": "Tickets",
234236
"Raffles": "Raffles",
@@ -248,13 +250,25 @@
248250
"NewsletterDefinition": "Blog posts, community news, etc.",
249251
"OrganizationOverview": "Organization Overview",
250252
"EmailPreferences": "Email Preferences",
253+
"MyEmailPreferences": "My Email Preferences",
251254
"VideoCourses": "Essential Videos",
252255
"DoYouAgreePrivacyPolicy": "By clicking <b>Subscribe</b> button you agree to the <a href=\"/terms-conditions\">Terms & Conditions</a> and <a href=\"/privacy\">Privacy Policy</a>.",
253256
"AbpConferenceDescription": "ABP Conference is a virtual event for .NET developers to learn and connect with the community.",
254257
"Mobile": "Mobile",
255258
"MetaTwitterCard": "summary_large_image",
256259
"IPAddress": "IP Address",
260+
"MyReferrals": "My Referrals",
257261
"LicenseBanner:InfoText": "Your license will <b>expire in {0} days.</b>",
258-
"LicenseBanner:CallToAction": "Please <a href=\"/my-organizations/{0}\" class=\"text-decoration-underline\">extend your license.</a>"
262+
"LicenseBanner:CallToAction": "Please <a href=\"/my-organizations/{0}\" class=\"text-decoration-underline\">extend your license.</a>",
263+
"Referral.CreatorUserIdIsRequired": "Creator user ID is required.",
264+
"Referral.TargetEmailIsRequired": "Target email is required.",
265+
"Referral.TargetEmailAlreadyExists": "A referral link for this email address already exists.",
266+
"Referral.MaxLinkLimitExceeded": "You have reached the maximum limit of {Limit} active referral links.",
267+
"Referral.LinkNotFound": "Referral link not found.",
268+
"Referral.LinkNotFoundOrNotOwned": "Referral link not found or you don't have permission to access it.",
269+
"Referral.CannotDeleteUsedLink": "You cannot delete a referral link that has already been used.",
270+
"LinkCopiedToClipboard": "Link copied to clipboard",
271+
"AreYouSureToDeleteReferralLink": "Are you sure you want to delete this referral link?",
272+
"DefaultErrorMessage": "An error occurred."
259273
}
260274
}
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
# 5 Things You Should Keep in Mind When Deploying to a Clustered Environment
2+
3+
Let’s be honest — moving from a single server to a cluster sounds simple on paper.
4+
You just add a few more machines, right?
5+
In practice, it’s the moment when small architectural mistakes start to grow legs.
6+
Below are a few things that experienced engineers usually double-check before pressing that “Deploy” button.
7+
8+
---
9+
10+
## 1️⃣ Managing State the Right Way
11+
12+
Each request in a cluster might hit a different machine.
13+
If your application keeps user sessions or cache in memory, that data probably won’t exist on the next node.
14+
That’s why many teams decide to push state out of the app itself.
15+
16+
![Stateless vs Stateful](stateless.png)
17+
18+
**A few real-world tips:**
19+
- Keep sessions in **Redis** or something similar instead of local memory.
20+
- Design endpoints so they don’t rely on earlier requests.
21+
- Don’t assume the same server will handle two requests in a row — it rarely does.
22+
23+
---
24+
25+
## 2️⃣ Shared Files and Where to Put Them
26+
27+
Uploading files to local disk? That’s going to hurt in a cluster.
28+
Other nodes can’t reach those files, and you’ll spend hours wondering why images disappear.
29+
30+
![Shared Storage](shared.png)
31+
32+
**Better habits:**
33+
- Push uploads to **S3**, **Azure Blob**, or **Google Cloud Storage**.
34+
- Send logs to a shared location instead of writing to local files.
35+
- Keep environment configs in a central place so each node starts with the same settings.
36+
37+
---
38+
39+
## 3️⃣ Database Connections Aren’t Free
40+
41+
Every node opens its own database connections.
42+
Ten nodes with twenty connections each — that’s already two hundred open sessions.
43+
The database might not love that.
44+
45+
![Database Connections](database.png)
46+
47+
**What helps:**
48+
- Put a cap on your connection pools.
49+
- Avoid keeping transactions open for too long.
50+
- Tune indexes and queries before scaling horizontally.
51+
52+
---
53+
54+
## 4️⃣ Logging and Observability Matter More Than You Think
55+
56+
When something breaks in a distributed system, it’s never obvious which server was responsible.
57+
That’s why observability isn’t optional anymore.
58+
59+
![Observability](logging.png)
60+
61+
**Consider this:**
62+
- Stream logs to **ELK**, **Datadog**, or **Grafana Loki**.
63+
- Add a **trace ID** to every incoming request and propagate it across services.
64+
- Watch key metrics with **Prometheus** and visualize them in Grafana dashboards.
65+
66+
---
67+
68+
## 5️⃣ Background Jobs and Message Queues
69+
70+
If more than one node runs the same job, you might process the same data twice — or delete something by mistake.
71+
You don’t want that kind of excitement in production.
72+
73+
![Background Jobs](background.png)
74+
75+
**A few precautions:**
76+
- Use a **distributed lock** or **leader election** system.
77+
- Make jobs **idempotent**, so running them twice doesn’t break data.
78+
- Centralize queue consumers or use a proper task scheduler.
79+
80+
---
81+
82+
## Wrapping Up
83+
84+
Deploying to a cluster isn’t only about scaling up — it’s about staying stable when you do.
85+
Systems that handle state, logging, and background work correctly tend to age gracefully.
86+
Everything else eventually learns the hard way.
87+
88+
> A cluster doesn’t fix design flaws — it magnifies them.
117 KB
Loading
68.2 KB
Loading
718 KB
Loading
75.2 KB
Loading
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
# 5 Things You Should Keep in Mind When Deploying to a Clustered Environment
2+
3+
Let’s be honest — moving from a single server to a cluster sounds simple on paper.
4+
You just add a few more machines, right?
5+
In practice, it’s the moment when small architectural mistakes start to grow legs.
6+
Below are a few things that experienced engineers usually double-check before pressing that “Deploy” button.
7+
8+
---
9+
10+
## 1️⃣ Managing State the Right Way
11+
---
12+
13+
## 2️⃣ Shared Files and Where to Put Them
14+
---
15+
16+
## 3️⃣ Database Connections Aren’t Free
17+
---
18+
19+
## 4️⃣ Logging and Observability Matter More Than You Think
20+
---
21+
22+
## 5️⃣ Background Jobs and Message Queues
23+
---
24+
25+
![all](all.png)
26+
27+
👉 Read the full guide here: [5 Things You Should Keep in Mind When Deploying to a Clustered Environment](https://abp.io/community/articles/)
67.2 KB
Loading
87.3 KB
Loading
40.4 KB
Loading

0 commit comments

Comments
 (0)