From 4da6b673cefef9907b97a737e7546bc0d1948d19 Mon Sep 17 00:00:00 2001 From: Rafael Scoz Date: Fri, 27 Jun 2025 13:50:43 -0300 Subject: [PATCH 1/4] Add elastic cloud migration post --- .../index.md | 122 ++++++++++++++++++ .../median.png | Bin 0 -> 86375 bytes 2 files changed, 122 insertions(+) create mode 100644 content/posts/2025-06-27-elastic-cloud-migration/index.md create mode 100644 content/posts/2025-06-27-elastic-cloud-migration/median.png diff --git a/content/posts/2025-06-27-elastic-cloud-migration/index.md b/content/posts/2025-06-27-elastic-cloud-migration/index.md new file mode 100644 index 0000000..aac1d78 --- /dev/null +++ b/content/posts/2025-06-27-elastic-cloud-migration/index.md @@ -0,0 +1,122 @@ +--- +title: Why We Chose Elastic Cloud — Lessons from Our Migration +author: Rafael Scoz, Raphael Ribeiro +layout: post +lang: en +path: /blog/elastic-cloud-migration +date: '2025-06-27' +comments: true +--- + +At Loadsmart, Elasticsearch is a mission-critical resource that powers search functionality across multiple teams and applications. From helping shippers find available loads to enabling internal teams to query operational data efficiently, it plays a central role in delivering fast, reliable access to the data our business depends on. +This post walks you through our migration from AWS Elasticsearch to Elastic Cloud, the “why”, the challenges, the wins, and the lessons we wish we’d known earlier. + +# The Fork in the Road: Why Migrate at All? + +Back in 2021, Elastic shifted its software offerings from Apache 2.0 to dual-licensed under Server Side Public License (SSPL) and the Elastic License. With this move, a significant software suite, including Elasticsearch and Kibana, was changed to a more restrictive license model. + +AWS responded by forking the codebase and launching OpenSearch. + +That put Loadsmart and many other companies at a crossroads: + +* **Stay on AWS Elasticsearch**: But remain stuck on version 7.10 forever. +* **Adopt OpenSearch**: But rewrite some code and adapt to a diverging ecosystem. +* **Move to Elastic Cloud**: Keep on ElasticSearch, avoid fragmentation, and stay updated. + +We chose the third option, and here’s why: + +After extensive research and careful review, Elastic Cloud checked the right boxes: + +✅ Maintain compatibility with our existing Python clients and APIs. + +✅ Access to newer versions offering security patches, bug fixes, and performance improvements. + +✅ A fully managed service maintained by the core developers of Elasticsearch +Supported by [public benchmarks](https://www.elastic.co/blog/elasticsearch-opensearch-performance-gap), there’s a clear and significant performance gap between Elasticsearch and OpenSearch, particularly at scale. + +✅ OpenSearch only seemed cheaper because we ran it on a legacy Elasticsearch engine; moving to the official fork would roughly double resource needs, an 8 GB Elastic cloud node would need about 16 GB on OpenSearch, erasing any savings, as Elastic Cloud’s [pricing calculator](https://cloud.elastic.co/pricing) confirms. + + +# How We Made It Happen + +## Planning & Project Scope + +This cross-team effort between the Platform team and Product Engineering teams was centered on migrating production and staging Elasticsearch clusters without disrupting users. We deliberately excluded major refactoring, OpenSearch support, or early adoption of Elasticsearch 8, choosing instead to focus on a safe, incremental shift. + +The Platform team engaged with the Product Engineering teams, set shared expectations, and kept everyone informed via Slack updates and weekly check-ins. Clear success metrics helped us track progress across environments. + +## Automation and Safety First + +The migration strategy emphasized automation and rollback. We used [Elastic Curator](https://github.com/elastic/curator) to take hourly [snapshots](https://www.elastic.co/docs/deploy-manage/tools/snapshot-and-restore) and built robust Python workflows for restoration, validation, and data consistency checks. + +Instead of manual checks, we built automated validations to compare document counts, field mappings, and shard layouts across clusters. Although Elasticsearch snapshots already ensure consistency, we added these extra controls to catch any writes that might slip in during the cut over. If anything was off, our pre-migration snapshots were ready for a rollback–a safety we didn’t end up needing, but one that gave us confidence throughout the process. + +## The Migration in Action + +We strictly followed a playbook: + +1. Pause the worker queue writing to the cluster. +2. Block new writes to the original AWS OpenSearch endpoints. +3. Create and restore the latest snapshot to Elastic Cloud. +4. Verify data accuracy and completeness without interrupting reads. +5. Update app secrets to point to the new cluster. +6. Restart the worker queue. + +The queue grew briefly as the system continued reading from the legacy cluster. Once the secret was updated to point to the new cluster, writes seamlessly shifted over. No downtime, no issues, This smooth transition was possible because the application uses an asynchronous routine to write to the cluster, allowing it to buffer and retry without blocking the main flow. + +## Performance Gains + + +After migrating the search service to the new Elastic Cloud cluster, we saw immediate and measurable improvements. Most notably, the p50 latency (median response time) for one of our highest-traffic endpoints dropped dramatically. + +As shown in the chart below, before the migration on March 20, the p50 latency typically hovered around 90ms. After the migration, and especially following the resolution of an audit log issue in early April, latency dropped significantly to around 40ms, with reduced variability and improved stability. + +![Latency before and after migration](./median.png) + +This performance gain is a direct result of the improved infrastructure and optimized query execution on the new cluster. The migration not only ensured continuity with no downtime but also delivered a tangible improvement in request performance. + +But the benefits go beyond just speed: + +* **Single Sign-On (SSO) with Kibana**: Built-in SSO support with enterprise identity providers improves security and simple access management. + +* **Specialized Support**: One of the key advantages is having direct support from the creators of Elasticsearch, including Service Level Agreements (SLAs) and priority response times, ensuring faster issue resolution and peace of mind. + +* **Effortless Upgrades**: Stay current with the latest features and security patches through automatic, zero-downtime upgrades, which require no manual effort. + +* **Advanced Monitoring and Observability**: Real-time insights via AutoOps make tracking system performance, health, and usage patterns easier. + +* **Reduced Operational Overhead**: Elastic Cloud’s auto scaling and built-in performance tuning make operations more straightforward and predictable. + + +## Final Thoughts + +Migrating to Elastic Cloud was more than a version upgrade–it was a strategic move forward in stability, performance, and operational simplicity. By moving off AWS Elasticsearch and onto Elastic’s managed service, we positioned ourselves to scale smarter, innovate faster, and operate more securely. + +Throughout the migration, we focused on automation, cross-team coordination, and risk mitigation. The results? Zero downtime, significantly improved latency, and a future-proofed foundation for more advanced use cases like vector search and real-time observability. +We are excited to take advantage of the newest features. Just as important, we’re carrying forward the lessons from this migration, which will shape how we approach future projects, system upgrades, and architectural evolution. + +## Key Takeaways + +The migration highlighted several best practices and lessons that proved critical to its success: + +* **Safety nets provide confidence**: Having rollback capabilities and automated validations gives teams confidence to proceed without fear of data loss. + +* **Use proven tools**: Leverage established tools like Elastic Curator for snapshots and restoration workflows. + +* **Emphasize automation over manual processes**: Build automated validation workflows instead of relying on manual checks to ensure consistency and reduce human error. + +* **Follow a strict playbook**: Document and follow a detailed migration process to ensure consistency and reduce mistakes. + +* **Cross-team collaboration is crucial**: Involve both Platform and Product Engineering teams early and maintain clear communication throughout the process. + +* **Be mindful of cost implications**: Cloud migration can increase costs depending on the chosen support level and instance types—review and adjust these settings to match actual needs and avoid unnecessary spending. + +If you faced similar or different challenges when choosing Elasticsearch options, we'd love to hear from you and share knowledge. + +## Reference +[Curator and index lifecycle management | Elastic docs](https://www.elastic.co/docs/reference/elasticsearch/curator) + +[Snapshot and restore | Elastic docs](https://www.elastic.co/docs/deploy-manage/tools/snapshot-and-restore) + +[Elasticsearch Python Client documentation](https://elasticsearch-py.readthedocs.io/en/v9.0.2/) + diff --git a/content/posts/2025-06-27-elastic-cloud-migration/median.png b/content/posts/2025-06-27-elastic-cloud-migration/median.png new file mode 100644 index 0000000000000000000000000000000000000000..c04f58d0f1df325ae01a3199dfaaa6895a5c139f GIT binary patch literal 86375 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Ν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

#hK zp;R?%bqX?>PGu%oz~;ZW7}O_X!1?OZ$*b~;xegAWI-gXBcN<mb7N?r8{w*D71!|oK&M-`2wOcml#zaCh{x5x z5bQXH<;tL+MJoS67Q@X-gR)jGwcS?ud!td%1`%Pw1(7vPa(36vlOi z-#u12wa`3684BLan3=Es;`e{wxhlId4&8)~(@w^T!MV47T@W#*G*M!igZ(`0Kahyp zLRvD)8ND^X1(-K`mp#-#Xn4Jr)~pQ+w@VC51M8*K)K$_Dd8dw<<6rw4kHnLh`I_w*l8nUL|D9IACS;g)CXXB@Y^x!vb4{{6Y8V|PC$yskTzdRJ0`7ePc? zeb*MVf2T3vahH{qH389B8($>#uWd`_t)92-%QAQDWE|b& z`s|A38{npPcP$o=5(bTEg)yKj$nrVxkQH=SZ6hW(Il!I>Qry*l-7XY$6iO_bX^v9; z6KsPvZ+DrXl@^Yp_|>EH6O699f}Mf92=5D@N#na9WCL>0vMbw^{Xee#XqRASC<3PF z??r0}ivUlhNzE(MT2NK9V86VTs%o;QFN2M^Zx3g(cNYIn?pO>CM(vw;i1l<3Gi83n z%y&u;is4jC>rV@}%lMd%o>0*}XEj-{w1s@!)SJTgou2xk<|;h~)P^CR(mJ5A0)op! zpc8o=b^7N?$!ww5;wF!JW+3*`%}KUkC><7PdfwTdsN7%JKAOTtbRXjJ7%0+2uui|{ zagzxsR#pVW;Oy|%Jj`wmku}Mm-IJ)8{>5aWG%4#)kzgChW_=>@*QqZmDtoiyG`e3@ zWXOlW?jW=5j~U5#Vz;#EjNGrbr!)b3dnDzUS)(GOp~$Per+9Izp#KY3`FgXDSFiBx z!{0VKF!r5h7xBk_+X4wfyagZQ@A2vf5O(@G3rd00 z1Kszb667T$IW0QJ9I#RHF3Ec2K<7N}Q_yq$(oV@0yj1JAPS5? zvq~r~4C%k!myv!SWa$M3bn|_@C^{6^-X!@DsgaOq2%efPLn1jgS0`^8YUwD4*i}Iw z(C0lS{sP6cw*GN08p=x0F%fE_IE#ne4?r7H44v`ZwVZ;27+>Pc-=d^iBl(`6Ud!>ZXUq&OsI86v zo`&luFcGbMD>%>OV`dxI=@YFZn^Sk4zn-{_3wsy zFG>R3-x6>s)>}>Y@97qq@I}b)dt~a#pDnw)HCZ2ObN|H;bPC`HlWgdFB29phtc{oz zu1jE&(tfKJhaic`f_h2kMR~om(h!W326Cw-aOm(_J^HW7RiI%u5yF*nt?vWGRF@&` zZ3tO3ovvJO;hiaI4C!fXPcijzQQ zj0^F;nGtvwKaeTtgV)A|a&m|ZXgp@C3-iHVE6ddisFaayRwl6yc3N644+zbKs)U+w+#1el2&Wan(tKvT7&KjT%fG^ddl|Aj z-RSR2GI{ zH#tJQ6E_DKOh+_;hfj@z6#YqwH2n@4;cp|FnzDWDq@C2}Vi{+P(xH_P7w|2JtE4%3 zyJ_Zel|p<|6qDLeMRPUv!?7%hm27VNXmoi*$Y-(26|2O_a#$f=-Sx~!)+V8c)ij3E z1ThH`=Bogp$=iW!^J2xvJU(w?`T$e}Y;ncnvjF7XmLiMUT-6z#);CnJj(MK~d(Xtg z)Hd+x8I>i_ZWZ7om_%>y;<1kXj&XC^JKJkhnScWKXlN|CV3|YY?sD=qjd`4ym{mWj?A_t|K_|FZ^e15A5M%o|U-TrFn(_@)MScSMsyT;YUUv7MjbF5wZOi;?nG0dux0Y6vSEcc6Df<+{ z`pMP%*Npf-Jn--B-Hh8>q>7NGPX2sS`aZb!8_@1l8pP#BNq$IoFAMy_sCb={N|05QrsJ2?eW6dTje^@=l`Ao2=veg zr#JB)awj1+!51;haZcvX38bFdh$-I$(5mL_n**Z2t61w)pY`VTp49!aExCg4=$TkU zAQaYlbZbGQn`;qRD%v92Ku@UlPWkP+Q$BjDwne70+-`ogmG?7+_Y{)LzmoF$+7gnw zEWbQV{PdWUlOOYzWCaMCLLRFVVy(gJVl!2#aGw09dZrv(_s#smcg2*Q8IzhWbE;3~-^~>QgC+5YJVvWnMmQC3Vmj#SG)>;pk)ASp@3RG5}SguUg8(WGN zg#-Pioeo?**<7T7h8OMKXzvv`DBv?m?o3ZtnfiK$fB+3!z4R-p9UJ~|Ro6`WDSbPOkuWzN^fLI91 z4-=ObU-*XikeL6b2N_}G7uY|*=JAeWDE-~ddGnV|VsrOh=}@5KVA<9C@6*~53Hk$H zin>(?HtSd7tx{}YtF|RLsIe0ecd;)zOS>&u*L2%Ve2Mq+H1=Fs$GC;J~+Q(h_cG6T zTg+2FdTAsFo47H~DZiKk*MG>QxiObL%zEC_Li(JJBZVxy2LTLA}48Rd{L}U z0J+-2W_RIfX?~DkMjFGmFLb(Tw=`ysKXo7+^qWwM*FSK&DLhPBg>Dnql(Ii#~Z+| zacg*chwbK*?T8?U(R<^y^0%BO9Fn}=*gKB!8%u+t=p4*z_;_2_n`pY?%rIKVm;H(M z?F|G*N9Vz6ndH?whEJ>)ZzQg^D^>roJXnlfkC19XvotM@y5nUPGCFf~_4Hbc$?Fb; zXMe_Uc=X+pTR*cA^Fnvcc3rO)R7=WR1%LpM?48-ny9xB(*HzZJSb>2Mn^LYj{<_vj z98=}uqXXw#TVue{hO{Y1gL>AAOJec1zubS6?6h04br(1mkzMqm90S?;O@%`GW0`3M zl#7daA}~_&?aIX%Eyikok}wpac{U|^glyU$R2tzIAr(dv?R~Oe1-R>bjs8FeC5oSL zEx&$DN@H_is^N0&KnZT95bl`jl67>qtd0hDC`nj#oPWfjbWll)ihM1k3N|_UcMv8gHDS`OD~nncL)IVp+Qzwu`|=%O{8&9zBGeU6|0NYNO68(F2Fb zgaCf=27(QI_dI?p1wpG39IZ#l?RFYMG#W&0wHNN~$HpR9OFf*NX~g6gXR~J%y{ai* zM%A}&B|W;G(D>WKAQuQrNMHi3b+Uh}<`260 z+zzAbpf(z?3bX>Qu9c*tm6`I{mu@|O{QW%^JL!8>;m-r%`@b0ZKdWK@^@XO+?ocbz z=3W2sF;EnmX67n#!+Y*51IY3_i^w~a)1+-)r0-7c_zap**wkMD z_p9)(XzI?)X&m~*Q#~TKILV?wbIPZR2bn!!) zn6{|i>dIi$ZCl%Wg(G^=yI>f;q!%3Dszz-FtbKaM9`dCo#1e}yvuTRZcw*(kD3eV_ zR{P^`xj}5x^;j9@)lrU4Q7E_KRw`6V)2MnBT{b*Wu9ZDW(=fEVvpYW;+O{W?t!_d= zrh@k+cxy}lpuqpe9%vJ8K8kRQO*{=k+XCY$Age;!d>@q_oRN2#7w+!u=5Q@{Elzn* z5GgS~q-8O2JxbIL2O}>uh{?a!VKwSp?$gx2@|T6hx8te_jXU?BKKQX9`Fya!cLXmi z_2yqc35{da>91J`wwni!>)<1fN!3XgI(kI7C~$dDh0qdf6DEvnO)REvf@Aq{Q*l7) z7*l$Ww+seEe9rI8(qecQrh$LP&${c$|AO_0a?JrWwW=F!Pg&*Mpo)BJj|{Nq{~Q?7 zJAftN$5OYRMiFs#i4%_2DzXi@`DcbmmS#|F0}KDTAl8Lx4qRU0mtqwPmbVS+3|~-6 z@rf{r<_axF78Kk-#vZS<&gjye=GSL0vC>@kCWgTY)OOAl2m;d2Dz4VkrQ{`}!x&5R zn_HoemtOBkj#i24r&E(XQ9dZDcy2$8O5GRnq#_f{pFnu5d|vO-mlv&gn6cam@7Br_ z;O#pu3$Qrsx=2p7_1$&COlx%XcS}Rv!sfBaq33k$)ozz-=MI81%K;eTI&j&l8{~h} z8KFFAF|u5lI>YD3#}@aUl7A_F7%niTOpSDBvU}r?4y2@OQ;r=vtmL)DQEEk=F0BSWua-q4{u5 zMxy-G(q&SjSV+F1-e8rb?aqWPJ~AaNz_3Pj!&V~pBIA$H|9_MNj-4hQ07|yESLtcE zL`8GnEH&MevX%b#Ed!b#oE~{V!81sIOrbG^(;bfy*dbyZxeQg# zmO2a>9Nva=0Rgi^JxC1Xew!WtrPQgYoH)-7#F`Mkb|y`#!C#{#(=;=8;=-V78aQ=) z83|MtjD8)%qajpqD}6C`8SBjFINhXuK5~LO>#6(ppAhFmkm0xWY#;(?AL7DRx?a>| zAGOz3hO`onkHyDz<|oio*B=wA!@LOs(o%M8O=4A%l_n6%l#pH^)y_-nTC5mFDTlsX zW-lvY9Gbe-*gjD=#Hwe=E978QvK%Ov4HQHKh?W%xg>$mYiPi-MUaP~lEf8{wi@DSE zILA+L`BFEjUsK+cAf7N{T=I66bioQd{;Q@bB$wQ0_Mr@MzC<#zZ?^zT5e9qFJ1~&= z58LfbnpcDW@@GS8Sr5?=w5?9=4Y4L;1NEf0dW-#inY-)s>}mk#U;pkf)M^HYuH`~_V?E;7(X!A>Jay-R16xln6ppY%O*&m>`lFH8AG zF{KH1Bj6Lp`z@Ep6xe&${@Hug)I#$OD?0vWq)fV`(gN4v9|_i07=I%B#ls1h5q-}eY~Lm3hjlNgGt-F+ z9BQ#wqd*QNtBbPqn(qb>?UoWv8ckhR>zY?(7aI_va7s9;UeI_o@6%1pUtUTSQr1 z^M#69n1)20DgxbfIS%mA`J%F;=ZSlBLxlVIh0E)#q$ou9=gp~L{<(o#4V+&%Q*ywa z#+sCm>*hH7DEU2ww>eifu$mGI)33BR=u;57(^x;va-S=gmqm*R3WN?qI@cQ(gti5K zrL9(e=~`52XWH5`fPvB=8QU7O#0ZCK|vaPO#mS1Shbvu z`u6#s`IcDIW8StDZ%^u9mum^zpO6w?eEW;lAPsd$4R(~eDSek ze$IL}TL~cNa+CkkMI}JaaLHhlIVgn1|NJShPnTMnM}3ewv=x;vt8epuL+d?M>f4;3 zfvo_OjsAQmF82+679qeE20P5)n_H)Tog^S{A29QRggaDp;rym7dnKKSyB3P(>oi>? zPmLQ2v@X$H6n-H-#ZJy`g3T?3{KiUNxU0Sh7LV)GBx0>aB3W&j^R}a(nr{)D$>>6W zi0Z@WLk2o=CTwo~`pp3aj!nLsn$^U9Dqd_>KR4t>SLZ+=LKyx>R`OHE=Eo~OLrva3|RIO3OM<*DtPRU z@sxr<`#@2eYwtp7!*u3?R`%`uBWJi2kQM`9?$tz>d+M3We@uORZ>4dO!q+gw?W+P| z#oTyIO&|odp;5xr)fd`>A>co=hTm$l4mY1vB1Ch#D(Xt5aE;O@PHbWFhU7HBO=MPa z%A;lD;7|2f8D@YB#*2QA@?p>|Wh%mv;5{k^TOD2l0*1s1k6&JsR(PGt*!AUQfl?ojqocDpLjIPlXSSZgU`US96dMNVWzNwu#Wqe%urmyz zR>K{`R|66wCQW(Ii~S-GL7|AhxZuU6(-3EH=x3+GUQjgsjbeD_;%@7L>kR-17wG)rT5t#VT|iz40Y zgYkkpx>I@v>E`l1W6S%lo4-+tJ&EuxvD^G^q2qmJC#3R5_`G2SXQN+I zgiEFpR5AtFt`K53cyn=1{#>Nyjn)_xrj#olbvL1nvg(!)Pqc`0eXuUM+rqS?{=>LV z$_Ss_E9Ld=O;I#gcES*F_`^I@d4{M~>iudNM1HF3$4|F0eM`eSHMvVS%ry*ct+9KL zopL`EahQxjA4O)VdJIKyD7nqcKsaPdXd6CWeIxpiV{LN2gBnRXKvRy;*Z1hUfL2BE zn-FQkWoG31yZ;h=X=p&`Lm}@n4?jC0_{ZC8EXUoy9b#yi9Zk&C z%Z51A^l=hhr&dY(?hA)~vO>~c;Y`cuLZuW^m!sx0@pfD3oQ_6)@r4VG62WR=(=I#c zRAO#xqHrTg>CVF$n1`j*w})JEy&?UNpWe8@ASEYM4{S@y3z}Enm0R8MrwDz#$XNn6 z{8Nx7=u1XkhOD*0g`&Q3FV_IMPOp)US07;5=oKq@3rvxdWJe4QWW1nq)2@{MA_YW7 z1?ZJ$b^zVayPmrOG2Zz2onHFxAduwPg}&x#SfSE0-3zuyhDIuzZIxgXnVKa!IbUvF z{vvpDJ!hit{wl4@UG-Jl$uTzZsU$*xrEwSms^_HnRceZt%j|dx^dj#T}{^X8lL08iRY7M|28kZo3aVFF-J< zl@tAzl)4rPH-v|^B@WQ+tUVYoocf3xj<~yz7#wC ze+CJdpLPC5yuN;X>QLWVF5l=wzPw#~CLNA`**djSUH8t{U%qMYn$^9~Hd-w#@6euL zVcO|q#*y1BT^k~;cRBY(l!SKKoHVYq9C>HB#jN*T@6;QqfF<8Pdiv4oxH-Sw0^bh& z>q4T}vd(!YnS&<;&Fbr_o?K5`Voq>#q{pBqdADjsLZZjw&VDn;=fOqqsE2uQJ$=3~ zgMXH^+JyKclXH$d@a}}wl6M|zYp|z0&l{W}I1Q2LYymX>gU1ffD=E^;4J z#eILwNA>NSRqgJJGty^XmC!0EzZi%2=^i%7OxYLT(RjcZ$EaVe3zVw}R#RvN-Gf{2 z$vA=(nDS%{3ke=ZUnMgQ$p@(On3*~SXqsk^Kb5)#D2rXe^vw@&cEyNqI=XjI?xui&KDugqMp-AxOo{7LDTo#1 z0N%07bmzZYvt*bT4$si7_^g}HP*T9e+$mShIc5H)sjwF5rH{=206ypVm@`&yV7tX? zH1L!rQl}Z2FL7b+_A>y)DY3Hw8MA1`b+NzUENGh3a}`=#uZgiPRP#dP>nop%YY1la z#a9|o16y34_*BO*B|gt=OseMIY_3w@U~rE|lhso7q*C4+ij!fF!aN4_v&Y|K?(!Ed z%=zFHy;5;#?T7k*O^&19^2glv--Bh(nvhhCEr{Wud7ZV zrz6~uTAq-eb465=c@JQ(&?4fl48IUf%P};qZ<{_3W*7h2dl`y z^-&FG;Wm=b)C6ny$LDvA!ASdJ+JzmM*Uc@ZClxK#G>w%;1ceAJuJXL3P@ix5*O@v< zX#>{=_&4`&B7q-UZWt}$kR0gUCU)*?Wogsb^m^kg8d};+8V{7?2@MKLKog41nzB=R6H2#0MIf|gz5KBbr4rs^DmbS;Yv^+pCG%)$a@ zB&h8Dv#>!Qz+_D?+AqdkTcCDed8AsLbbNF3cCUE^48dCQ+-)?xmLyw_Kn^&wnVT9KT94R}#@>Ai zE?FE-_b2gS(=r=JzJ%mpg=IMzmV5Fr>1#!PML{AMMM-GTpo7`<5ufQxF(!w}xN{=H zW+WJNhPxeP~aMa`Q|m12wnREoIB^zJ26C-o?H+z-8!k)!?m;Pd%6Ho3z)o zED9;tDN8qtpe$Q#Oq=RzG(alFPHkX-F72IeSJ)?b} z&VcxiOS8(|k>E2=9;g;OJwD9-TreXh)nLe=X)wZoH{!iIM^2-ip{zara~3S8rm233 z0{c2*3Yc#Ro*U-Y1@Oq`(ooMo07RdjvWeFfNSE|uXUWSmjfvAmSvXAbhl2#C8Ku!- zF5eWv6oV=o7AUy6G$QGpX=SwgLf0jXyx0^?t1#3${JAZhVl-2#*?_ItzQAn27H44> zYGJSb`gAJe{J6Z%IVOuRrOcRH_lF(I90i2D9bW<^|y(}d-@|$c0M@7EPj*bH zrt*+tQ3Ft(G}`aEaWAAk>XNdQD*(HP7c7T_C<{dGl#mY8nmTUC*NXs>YKrtojijXg zq16eYoZm2K@!Y*N}Y4qjCAliGcqx5ZB5gsH3Hf-h@G2iPm2FWtY4 zQ+yd@@;dgRX9^4kmSLJ+;Y=}+9m!M7mo(**mp&)@`lYv0ZG=2|U!K0kQeo9euU{qN z>c{4iVY%>`d0@&YQU%yNQ4n~@rmz1hhyPexlgY!QM6vAkO0Zyp**O+qDUoG z?it^u9+%!XjR}MG!6}2_ofQUV9O{jg7bE85X_lS92_xh{!a$amFQnr}rxilKxqioU z_?9U8fg`9OrN~YhCg&h@0PRj>>fx7Qyqc#uXH#)%j_7s9XJA!*C#E61%l#Y&@rr{# zC&Cy0I%x-^Z>@?mHhF(-F0`eYapbGMNuzP^OPSy+bJmW2t{9Ysdj=Oh-7nE~9P3Nu zaBF-FCMiB0x6y~>fdUvbpSXG9IbUlK7{c?)UJ0UO5H;<5cjoF0+xc$1ouJ?(Y&&Rc zosh@OzMo<2Wr69qEeK|XPGB13o}~+YSZQB*ev;{u0(M|! zG&;^Vs8UK8_<3(GY$^EDIFC3{&|dQ77YK07#3Yd)>v7^o7(ZTb-Hi6AFKZ3naN_4K zR$J`=-ON{NNxr~U*({L&@i%rhQb|{9Nkr@nFfobi%hPKevPv~B-a7H7p`qb+(I4!9 zc}yk9{_S;(u6+H0nFBZ|rC%GBa*JNMP@RaeJv|_?#!0?uY4jLR*r5F&tMjjlr<#Fb@l`HhYhQ`Ak|)HgzrLoBrJ2fq>%3C{ zRMuPtEsw;llomE0OGO^~1xi8rOL=36_?5hI?`V;og|18S7m>8u&*r;l?&ZZYHgCGH zwR-Q)Pvc2jrp-K`uL0D|6I1Du%U~~vsq*n$Cls607Qcwv^;#B4TIyrc4!aL{WjW0? zpC;EDwZ?)22=yQ+ll>v z;%7Pd{^2?x!dSvqf0|0!l+vEDv9%R4%|#;neag$qUJJC26)C)4H6lbU`|=47AZgry zt5l2}0M?nlR~cc6RYnM(T`4bY#p0U^r=cwM#SSsL3K-6DiiL4)niU=7LFuaF7PJ*LD%G zyBHB)p8^24tV=RW>&lnvXfAnHumMI|S&$VBCaub03p$_#oM8MqQe{dtltoE(<&oG5K@)>9pUr4e$#VAHH^cF|axj=EU|N6LNy*_q+KAq4 z)Pq08Lr&Ykt}C9NdcHqj|I!7i$B`*xUQSv!%N2? zC`t_jmhYgE0neiBfQN{P$m=3t1eS2z4D`!=+~vKS^;V>`_hwM z{Wn^BwoU|!|INZQj|Hv@@gg=a?FZj0#9r0!_VNQd0Cl=jWZq9EX1z>Mm9Nua7G$VC z#u`V|o`;uE@GaXAXA>P8%pl_-;4X8R;^ZsfWdGVcq~;y4oXPl*dQ@&b_^~F(TYT`D zlFc?@#d4S$qdm~Nrzm3HaGnNMdJ zz_r29efu1gxV2G(yopF$@?GdM&wKp+&qxum{+8+H#K#)jz&7erKpmjZeSWLS3bSZ` z882*@YbNtI0n%xZ6YHBGV&mtzTAW&4hB^y)#36)K4B{{1{4gm zs;mk-=aPmZx_z*+IWJ}(mv1V6OU&U!r!SLiRYX>DrXt0%JNo{kj* z5h@xX^MbfWVMT?jx zWSwOYsdb4f)##F|YdySY4DGdpkan@b2A}B@PC*qFc$oq(BJWzx_a+|c8X7W!Y{u2} zwXlS3zxm79ssR-k%-ImM4nh*_+DR&=?r2j_l2swW^#WR_+-;QNWPVJKhF#Rj3(ql{ zRV$q`J@!1Qr=+-dyxycviPW9VG!IA}w6n>HsogKvZwON@(-^zoCRSj~yB=5D8=U1| zvdl%S4GAbT|KwTwBGVo}$LtLX(XB!9Ns)E_pUYD>XNRopfPTVY$d5D`aRxsw0C?}A zl3A?Y_R*-dn>fIt7L-_l|BH)BIo8PPXC#L!jwqMAf}!ypkziEn1YM`T4Owt#U^TM=E$XMYX-2_dl6meSSU|GJ zWQdUaijm9B7GE3XB8?A^Y6o(Ap$30jj`UaWUj%b7{50HtzXhlixuX-(O{e19CrTcQ`{BC)L;t{0Ukdy{@UsPVvg!+isLE+_VL{ zYv|{Comt`p0!-rJy^$O(uAL&%uE2qX5A;i?)1V~5ouZ+lXKMPlFdL{FAYkinEe>Qo z?I21ibv6!uQyPf5Gtw0-`go$)6qR&^s%4&R+kB{20G8>O6|1PDVg{TKJVugT-hx{6 zf2zGdA*;Uyije;{AgKLE#1-&`EhzZBlhQ%q9+W5Ud{8`kf&G@q`G-Jp_xpIRK`MXk z0P$cudeCD8`gXzG2Wj~Y_$(w#J+PC4JOET4%KUAy0ChuI(v1c- z268MxWRJ=Y&cZrf^RFtMd_(%e(|M~(*m@@S!*#4#l z|9i{|nam`jRGN@*jKwOjaWG8uyEW?3FB%stSNF`K>x~k{Z6gY*rw5KlAaRAx-@gqw z|BB!U80n{^Sk?X?cSLqEq{PX2$a1{HwqET)tQe9)Ihl2pNDFE=3+bDRCVn%agZ@Xl^_LZ-cz* zT6l|4z+6wWaC70}TQU2=2XX-m15lgg`MyIu&+(>zej_sMO~^7Dd61sH!_dCLt9On6 z5zr6%+E0VbG-kdh+eP)1Py!HuoOkWL3j`SI2L}ZC-L8n~B0r*CrXCgB`mkM5Gf*_l zfPZKFkCb=;Z_ESV+R{!r%y}*Ts_*Q;;vRbIyJKU1b0&?jd&n6!-vM@=ZJ zUNx@LmID`U!TOQBD`ykzEI=+-%y{is2e6Wwc}m3}+37PYyuLjZ(dyDEYn7`4RA$EW zI*P$#A`6MivVkM61IDwAC6C&f;(_7$(r9%>cV1BB{r3<4f*Ojfe>>%O-xso|1ypZq z8hYTe>zJuW%`N@k+p#$@4&BZK6EpLSUhQs7Wzwzj^Y$1d3`h+$E6!cJ%PMhf7WNlz zeHZxpJ@8$@R1~Qvh%}>|P>=+z-_WsOlPBXT(s7*M6i`*#XM}pPV8ZxhmkvqiVVmq` zkU3oCO7$rL&8uW%Oke>QH5`Bsn|Q%4!b{MZ(l%y(13ar%#Jv>GJGbNNX6NFjHzsCK_fvd4}hjAhBDJEE#eYN*o1 zYVq=4yMIlJ*Y3OsVO^ft1n!hA;7n&a-=}nBY6|H2@=q{{G$rZxwbp_~J`GrO;&gv} z4muSFRCD)z*FsITy>#v>?0NzJM{M(}D_U*EpKFjOn8nm}3k;NF&g240-2?^r@00hn z53BoBclDTi@am!=+*z4tyg3$}A50l5e(Con$yOp=enHC1f6M~@Au8U_JZo{C)rxNrw zscHX9EAOyK;3iq=JA8& z(^Zy4q)pupkepZ~>pHZy?C56*8MOHJi&Gh_6k6SS)R_Y3pOL@~nzu7IGMIR<(HuTf z*ASd?uE!VVB^jW5_yY%gTXmND4PwLEvHZ9y;pok^^>b%u+r`IUL5Ud$XRl?PF=y&-Z#Fm=I>6-~*e-p4 ztFREr><|eWBYj3mPJKQy8StO5t zP_Q_3`T`>kHVuw@@J9=M_uLWwAq!z=lH>8sT&W_08LaH|0w(sHj~NBc0wh1|1Mk%s zt5k$8Q2A)h!>)(S*T~PlHgB^O^0H}TsNGgRC+qciF(~ll1*tMmRLwQNIq7jhVZTKN zR{q@2Q1>*Dg`#}+rdY+J56?SIgN}2;MdG`hZQeFHzVpS?hU2@jBc5}~v-d0zmni=C zxs)V~3EP}9NxRbt{Ie$kTmiEm`B1!7qZ~?qnIEyf*t-dXH%1`5qF@EvUs6}BmWkPM z4#v*Sm%FRo9ea9B<})8K@tO=T`HrDHXK8wX#JK2&-3#X)N~to_*c4YiU>1^<`~3^8 zrU<&Mdwxb&Y9}-$2AJO-=6&CA-R8$KeoBR{gVw^Ax>)E=Z#_P%EU?kdKw#aQpa6Zs zko|Gnm@@ z_NyHxP08;o?qf;&o$7y-S~S1x7k>p1Ct(4UDPeeE`@vmH+_;}#blCO;h5R6s_-*+x zFRqO{AX7^5Ox7>6KEuj?+7LwoH}`j3box`94s8WM){GP9CB7!@AQp16rz8CK-pr3% z44H85avtjAO=T>G?at5X7?;JPlhNA7u6;TMtk-G)3fH=~voTY(SO|6U`|Q*706Dv0 zW>p~zpu@IKuScT|Pc){}g+Cff#Ruuq+mNo(&;<+sv!^u$;!T4?|I*n^2?2+Lg|s4y z9jq_D+IfFxF7f69sH_P&9^Y(#$^<0clEP0Hl)^rqk{0yuXv>dlw)XcXK1ui8$}^4U z+%}NRi0fF*D&8GDMLR|*vw1i`H|qORyW6aLa)CaVZD)p=#=lAG10lImBfwiT>zk796&Q#;T5Bt0;tuemE=^x!UqcJ zkEh1`q0Az@acAAN58rDhqeMtHOcWa!0_{<9ET^AF?;-ylvHzS}{>q~62pdR)x zK815)hH-;k*}lKfm^V+a$ic-_r-sG$h(KgJ@RpyFh#swly!Uv$*r}f6Kz&EN#tKGRkveAk{z9R?MtXEM}Q%f8NHuQ)PJrmE& zHoMUGjUfYyr(|D&xTa(V7L28dVOrT35U+i?d+S2XHXdkRJFy<{XY4mmTO_Trc!v)Og1T`vF-|dItF*;$43Rggof6$j5X-Qng@5QJU|wj_a2~6E-c@7Ud>bpotBuG2xATe;^y10e|F5@e52re7+oq^CvrYSWkMz7P}*fvLpc+2J{21w=QA7M zz4orY_nY_g{_|ef*FRm?zW7;t{nmQc{oK#9?t3A>Kko0(DGO;GElNS+H&$L-D~A{w zD5S4?C~Kyd7U}tn|0<#SaK$kb!rw~gTeTQa7ueTqfC+>4>wd9~4l9Kvt^+>E&&`f! zw|B+g+J33MRBhZC^7x%P_EmTH1+oBU?*S$Lh4rp+Q{sa#aPVIhDu&lIe;cCo-cKMu zT}h*6kBk#<1^P^nS@MGfp}hkZ>!;pN5jb$>uuWNQlS@xx$JypT)|kpgLDb(miLqz3 zf}u2p{a)ZZ=CgY|obe#>cP|Eb@vjaPGkiHqL=gDZCr%7&>@f=C$>rnn0uoo#2ip3c z_lMxE4tJzoHWjSRpqViMkxM#xeNA-P$RsLNeZe?>0A65?Y}&j zlagoK??QTtymMOs8kKAtpYBiIyvbddBwOgOIbn7Z4Zo1ajueouk2KVGe_K@*e&A$= zZIfYFl_uW`DQ+Hm`CdxZQz%>9B<2@!a#|EAHoKETvk_B*nEuZN)9_w6R!W(p!}^v0ZU?#LBIHJr#NQ&8Ds~#e!(0W&)|ENLAromu z4gE|2^&3s~;qbDsg14FJ0aPRZBM0oLhhBcO?cyZ4q}f%S7`gL8{Q5^*ve|aq3Vcl? z?kwhCSKC2LXEE>Gd1+kgF(F0F@W`Xj`FUU4{48IGpCcxm&#`({*JLWh>TZ@3Pc3F=-g-cdRjWKao_ z9DEF|^%NjkIA`>rS<%V7bs$GT-xwa6KEz?9q>Y+v8ufH`sz(SK5jw?DKV(?+_zrPQ z`pCEjRK!W3-00BP7(RiE>_IzV0U`tf9cg6D0?xt(51^s!>h<)!m*`5S%jo{h$&N@L ztDi1s6n1%c2ukgd2C%4fX^B?5xDs**CtDxo@E>4zy3JZz)Fhd7%pyyZ-OOMGV?R`)>L-pVoH}kxaHg-vh%}j&rO*fa$Mg|EPwp9 z_ed#2$+jW>A7RxphW;MinxEhMgRX74u(K_;XMDrvuTyO+<(tX&JqW2J?f8<`piJfB{1K23EUecf^M2lS)egVOPmc;3Bc8}Ry0B)N9)kx#L8ZAQ-qEkpSf=vyM@NFfG7f8b&XWPu1 zp4or;jN8F>WtX}p%lm8Essu>W!1-?HJNJdfBG0wOowYVIM-Cr$NUn<|` z-I?MzT9RQ9GUUr52m4eips@DA6}24mx>VQ)WJIQp*WeluN#Kcv=}2Fb5#ThMJS%Up zVna;>;648+rsw*Q#OE(d2suCi?p-BfPYl(_gcneNISmCHo5fe7o8EY&o~=_7`N84g znf;e=EEY!6vi=bt%z2hxj-{}bY zRxgIulI2540-unO5G|NBG0d{5&{#ZeW)`&m%jBW$0fG8clpJrG$ zdsDiQ^WXwdZI^U4nd<{wX0@QLtyiefz3(@p(4WdR@x zY8o9$V8U+Kom*+6rDn(4dtvn{sONv9mY5Qs-nhsfZ7;0`&_)0?=$ni?ui0 z_*G1<8!_ibGEnkRg4xXetZ`=lK6o~5dNwPkHt%>(e|xToH>jKhMri*8SMW*2SAzBw@xPl*zyxY8|f03$l;XHJ(Kh9vCUgnW(roL#!#6@{IqQP z`f+(X9s8@~g!5<>wH^6vFhEht0_&^$znmF=f8EBWBkz2}aGC?hwy&y8)++O=^@w2} zINK5cQHZ}1u|sctE-1XSt}Q4Q<`#!<`|eqvoWQ(q zIv6W+0|%*J5tJHR!cM-_Ywd%WsdyehM;f;5=6#VWG}D;4IN3vHW@W{m2EWf6UfRn& zRW_tg{)V{rv5`^9&a|%Cd;uZCm3kdgTayL)t{bkcR!|xr?XEhI1o#rJY#p-hw>KKA zOlU##N1MWga(NJ;3uf0j)SAa>7f|LV^@oSCG<9e~%BKszt)pen0O5;orNFYLq4?O9 zZk!g}0FPb@cP_%iz9DAksc`e(~WXgTbh4-YM{}M!VP?MC5wN(Ahzt-bKnOCDzn{S+70l?E4J(Ko%x4O5$s!YjWIm79xGx#B|~NYW@NLv`a1bqsR({i*7jXpbpi?v2}yh(qR+}_Rbse_}6T5 zl6nWPJ>`roSrai>9E^$t&lO)#+`r5%zw#2JpM4KDz(xyek2saAnD=!WJO5L`hpW6o zNd=5zp;z1*0cA@XD;G+xImdUo0Rl4}Y5&GRLWK|Bjg}(^Y9Y z6*7ZT!=hAjaq35tSSooi-?j2TwTqBpTV%DQS^D7;uO11|lORkLG9Y1Q?AT;K6xC19 zlRksele;4Kx@jgN!Pqu~Ctapa?-xzxZd8}dXmW^z5_qXJo%3V2Io-$a&J}OX%Ma97 z{|5=tpnNrtK0IdL*8+!QvR;+!yN^_sB6#w5jG?^L6c0JyJh6?WNYb+2jXju{D6!|i zgv&e58!FRFlxxCHrOjq%U79Z3*?CinhK>P|3}JkOLmHe4+q;~n=i68~K0}Eu7pF87 znl&Qh+>@B0<7TQ`>k9LqK-etj6AJCU_xg}*q%_23jbPcy>A4BNImL`J2=dV(sdrZQ zBTm`0QMX?Y9}{{B?jZ=w>2Bx~$p;S1WkhvR+5r64M#e&|tmq-0YnV z73g42o;177jMfyP|Br|m1`;sDYJfF?`-e}H8u-NQpy>9qiWzDyBefeD3F$G8b2H)w$7I*jX(#ip$7GNq{GbMBndkp$NYxEjdevwZ zYZI>*#R9h-ycK?d&L3f{7EzOm8MCz|m7PMc^RHf1lNla_ZwUT-;Z2x8;PM~91pUeJ zbQ)JM&8*c)4~cH9@~J?}Rce_MDf-xg(t(ydUbd|*>NK${ZLl_ZTCZ@*@b5TPsJKNr zINw-Ew4Nd5$Ze$1C(ePmz0nnE-P_DGN_yJ5v<_oYFG>+gO+@?Ftrjtyjj{#P`BHxQ z#8LE;YfDAN2CN(U3nSEg-R~vrlV0hwKN)5qJO}rokQ8`BO1tnw`Je4j72P_n4ADL$ z;jCb)=?%t(&WP>?8of=_4m?z(`15XU%G3=y*r))4QjsiJ%O0CX*OKJaYNP2PT))Vp z(?Fe+>G*GlXCGst^;#^ZUA*E>FGfnL9F|W_RO(Yqh-M*f z@(=60vYBe=CAq>7v;R_AI{nSn6Nw9|=V+v12WgS5GkY+vL`ga2;gVCm(+T@dHHZ`4 zgM^^Y&Z1L%T7VPi0 HarwUiAeb+V literal 0 HcmV?d00001 From 3397ce7a6df6e0be88b885e051987902bf9426c7 Mon Sep 17 00:00:00 2001 From: Rafael Scoz Date: Fri, 27 Jun 2025 13:53:26 -0300 Subject: [PATCH 2/4] format doc --- content/posts/2025-06-27-elastic-cloud-migration/index.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/content/posts/2025-06-27-elastic-cloud-migration/index.md b/content/posts/2025-06-27-elastic-cloud-migration/index.md index aac1d78..13528c5 100644 --- a/content/posts/2025-06-27-elastic-cloud-migration/index.md +++ b/content/posts/2025-06-27-elastic-cloud-migration/index.md @@ -9,6 +9,7 @@ comments: true --- At Loadsmart, Elasticsearch is a mission-critical resource that powers search functionality across multiple teams and applications. From helping shippers find available loads to enabling internal teams to query operational data efficiently, it plays a central role in delivering fast, reliable access to the data our business depends on. + This post walks you through our migration from AWS Elasticsearch to Elastic Cloud, the “why”, the challenges, the wins, and the lessons we wish we’d known earlier. # The Fork in the Road: Why Migrate at All? @@ -66,7 +67,6 @@ The queue grew briefly as the system continued reading from the legacy cluster. ## Performance Gains - After migrating the search service to the new Elastic Cloud cluster, we saw immediate and measurable improvements. Most notably, the p50 latency (median response time) for one of our highest-traffic endpoints dropped dramatically. As shown in the chart below, before the migration on March 20, the p50 latency typically hovered around 90ms. After the migration, and especially following the resolution of an audit log issue in early April, latency dropped significantly to around 40ms, with reduced variability and improved stability. @@ -93,6 +93,7 @@ But the benefits go beyond just speed: Migrating to Elastic Cloud was more than a version upgrade–it was a strategic move forward in stability, performance, and operational simplicity. By moving off AWS Elasticsearch and onto Elastic’s managed service, we positioned ourselves to scale smarter, innovate faster, and operate more securely. Throughout the migration, we focused on automation, cross-team coordination, and risk mitigation. The results? Zero downtime, significantly improved latency, and a future-proofed foundation for more advanced use cases like vector search and real-time observability. + We are excited to take advantage of the newest features. Just as important, we’re carrying forward the lessons from this migration, which will shape how we approach future projects, system upgrades, and architectural evolution. ## Key Takeaways From 328f9b7833234937a7db44db5f57b044d6455cf4 Mon Sep 17 00:00:00 2001 From: Rafael Scoz Date: Fri, 27 Jun 2025 13:56:01 -0300 Subject: [PATCH 3/4] add opensearch link --- content/posts/2025-06-27-elastic-cloud-migration/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/posts/2025-06-27-elastic-cloud-migration/index.md b/content/posts/2025-06-27-elastic-cloud-migration/index.md index 13528c5..805274d 100644 --- a/content/posts/2025-06-27-elastic-cloud-migration/index.md +++ b/content/posts/2025-06-27-elastic-cloud-migration/index.md @@ -16,7 +16,7 @@ This post walks you through our migration from AWS Elasticsearch to Elastic Clou Back in 2021, Elastic shifted its software offerings from Apache 2.0 to dual-licensed under Server Side Public License (SSPL) and the Elastic License. With this move, a significant software suite, including Elasticsearch and Kibana, was changed to a more restrictive license model. -AWS responded by forking the codebase and launching OpenSearch. +AWS responded by forking the codebase and launching [OpenSearch](https://aws.amazon.com/blogs/opensource/introducing-opensearch/). That put Loadsmart and many other companies at a crossroads: From b3eb8ac668776b076f9f7f81de39b15bfdd4e213 Mon Sep 17 00:00:00 2001 From: Rafael Scoz Date: Fri, 27 Jun 2025 14:45:34 -0300 Subject: [PATCH 4/4] cr: improve text --- .../2025-06-27-elastic-cloud-migration/index.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/content/posts/2025-06-27-elastic-cloud-migration/index.md b/content/posts/2025-06-27-elastic-cloud-migration/index.md index 805274d..ce3a012 100644 --- a/content/posts/2025-06-27-elastic-cloud-migration/index.md +++ b/content/posts/2025-06-27-elastic-cloud-migration/index.md @@ -35,7 +35,7 @@ After extensive research and careful review, Elastic Cloud checked the right box ✅ A fully managed service maintained by the core developers of Elasticsearch Supported by [public benchmarks](https://www.elastic.co/blog/elasticsearch-opensearch-performance-gap), there’s a clear and significant performance gap between Elasticsearch and OpenSearch, particularly at scale. -✅ OpenSearch only seemed cheaper because we ran it on a legacy Elasticsearch engine; moving to the official fork would roughly double resource needs, an 8 GB Elastic cloud node would need about 16 GB on OpenSearch, erasing any savings, as Elastic Cloud’s [pricing calculator](https://cloud.elastic.co/pricing) confirms. +✅ OpenSearch only seemed cheaper because we ran it on a legacy Elasticsearch engine; moving to the official fork would roughly double resource needs, an 8 GB Elastic Cloud node would need about 16 GB on OpenSearch, erasing any savings, as Elastic Cloud’s [pricing calculator](https://cloud.elastic.co/pricing) confirms. # How We Made It Happen @@ -48,9 +48,9 @@ The Platform team engaged with the Product Engineering teams, set shared expecta ## Automation and Safety First -The migration strategy emphasized automation and rollback. We used [Elastic Curator](https://github.com/elastic/curator) to take hourly [snapshots](https://www.elastic.co/docs/deploy-manage/tools/snapshot-and-restore) and built robust Python workflows for restoration, validation, and data consistency checks. +The migration strategy emphasized automation and rollback capabilities. We used [Elastic Curator](https://github.com/elastic/curator) to take hourly [snapshots](https://www.elastic.co/docs/deploy-manage/tools/snapshot-and-restore) and built robust Python workflows for restoration, validation, and data consistency checks. -Instead of manual checks, we built automated validations to compare document counts, field mappings, and shard layouts across clusters. Although Elasticsearch snapshots already ensure consistency, we added these extra controls to catch any writes that might slip in during the cut over. If anything was off, our pre-migration snapshots were ready for a rollback–a safety we didn’t end up needing, but one that gave us confidence throughout the process. +Instead of manual checks, we built automated validations to compare document counts, field mappings, and shard layouts across clusters. Although Elasticsearch snapshots already ensure consistency, we added these extra controls to catch any writes that might slip in during the cutover. If anything was off, our pre-migration snapshots were ready for a rollback–a safety we didn’t end up needing, but one that gave us confidence throughout the process. ## The Migration in Action @@ -63,7 +63,7 @@ We strictly followed a playbook: 5. Update app secrets to point to the new cluster. 6. Restart the worker queue. -The queue grew briefly as the system continued reading from the legacy cluster. Once the secret was updated to point to the new cluster, writes seamlessly shifted over. No downtime, no issues, This smooth transition was possible because the application uses an asynchronous routine to write to the cluster, allowing it to buffer and retry without blocking the main flow. +The queue grew briefly as the system continued reading from the legacy cluster. Once the secret was updated to point to the new cluster, writes seamlessly shifted over. No downtime, no issues. This smooth transition was possible because the application uses an asynchronous routine to write to the cluster, allowing it to buffer and retry without blocking the main flow. ## Performance Gains @@ -77,7 +77,7 @@ This performance gain is a direct result of the improved infrastructure and opti But the benefits go beyond just speed: -* **Single Sign-On (SSO) with Kibana**: Built-in SSO support with enterprise identity providers improves security and simple access management. +* **Single Sign-On (SSO) with Kibana**: Built-in SSO support with enterprise identity providers improves security and simplifies access management. * **Specialized Support**: One of the key advantages is having direct support from the creators of Elasticsearch, including Service Level Agreements (SLAs) and priority response times, ensuring faster issue resolution and peace of mind. @@ -85,7 +85,7 @@ But the benefits go beyond just speed: * **Advanced Monitoring and Observability**: Real-time insights via AutoOps make tracking system performance, health, and usage patterns easier. -* **Reduced Operational Overhead**: Elastic Cloud’s auto scaling and built-in performance tuning make operations more straightforward and predictable. +* **Reduced Operational Overhead**: Elastic Cloud’s autoscaling and built-in performance tuning make operations more straightforward and predictable. ## Final Thoughts