MCP Server Caching: 87 આઉટેજ પછી મેં શું શીખ્યું
મને લાગતું હતું કે મારા MCP સર્વરને caching ની જરૂર નથી.
મારા નોલેજ બેઝમાં માત્ર થોડા હજાર એન્ટ્રીઓ હતી. ક્વેરીઝ ઝડપી હતી. હું ખોટો હતો.
87 પ્રોડક્શન આઉટેજ અને ટાઈમઆઉટના ડિબગિંગમાં ત્રણ દિવસ વિતાવ્યા પછી, મેં એક કડવો પાઠ શીખ્યો. દરેક MCP સર્વરને caching ની જરૂર હોય છે. નાના સર્વરને પણ.
અહીં શું થયું તે જુઓ.
સર્વર નોટ્સ શોધવા માટે semantic search નો ઉપયોગ કરતું હતું. મોટાભાગના સમયમાં, તે કામ કરતું હતું. પરંતુ પછી, બધું બગડી ગયું.
- રિક્વેસ્ટ દરમિયાન કનેક્શન કપાઈ જતાં હતાં.
- Claude Desktop 60 સેકન્ડ પછી ટાઈમઆઉટ થઈ જતું હતું.
- Nginx 504 Gateway Timeouts રિટર્ન કરતું હતું.
સૌથી ખરાબ ભાગ? આ માત્ર વારંવાર કરવામાં આવતી ક્વેરીઝમાં જ થતું હતું.
જ્યારે કોઈ યુઝર એક જ પ્રશ્ન બે વાર પૂછે છે, ત્યારે AI વિચારતી વખતે કનેક્શન આઈડલ (idle) થઈ શકે છે. ત્યારબાદ પ્રોક્સી કનેક્શન તોડી નાખે છે. Claude આપમેળે રિક્વેસ્ટ ફરીથી પ્રયાસ (retry) કરે છે. હવે, તમારી પાસે એકસાથે બે સમાન સર્ચ ચાલી રહ્યા હોય છે.
જ્યારે એકસાથે અનેક રિટ્રાય થાય છે, ત્યારે તમારું ડેટાબેઝ કનેક્શન પૂલ (connection pool) ખાલી થઈ જાય છે. બધું જ બંધ થઈ જાય છે.
મને સમજાયું કે મારે AI ના અંતિમ પ્રતિસાદને (response) કેશ (cache) ન કરવો જોઈએ. MCP માટે તે ખૂબ જ જટિલ છે. તેના બદલે, મારે ભારે ભાગને કેશ કરવો પડ્યો: semantic search અને કન્ટેન્ટ ફેચિંગ (content fetching).
હું બે-સ્તરીય (two-level) caching વ્યૂહરચના તરફ વળ્યો:
• લેવલ 1: વારંવાર થતી ક્વેરીઝ માટે In-memory cache. આ અત્યંત ઝડપી છે. • લેવલ 2: રીસ્ટાર્ટ દરમિયાન શેર કરેલા ડેટા માટે Redis cache.
તેને સફળ બનાવવા માટે મેં આ નિયમોનું પણ પાલન કર્યું:
- ક્વેરીઝને નોર્મલાઈઝ (Normalize) કરો: હું ક્વેરીઝને લોઅરકેસમાં રૂપાંતરિત કરું છું અને વધારાની જગ્યાઓ (spaces) દૂર કરું છું. આનાથી cache hits વધે છે.
- પરિણામોને કેશ કરો, સ્ટ્રીમ્સને નહીં: હું ફક્ત સર્ચ રિઝલ્ટને જ કેશ કરું છું. સર્ચમાં 95% સમય લાગે છે.
- ગ્રેસફુલ ડિગ્રેડેશન (Graceful degradation): જો Redis બંધ થઈ જાય, તો પણ સર્વર કામ કરશે. તે સીધું ડેટાબેઝ સાથે જોડાઈ જશે. Caching એ ઓપ્ટિમાઇઝેશન છે, રિક્વેસ્ટ સફળ થવા માટેની અનિવાર્ય જરૂરિયાત નથી.
પરિણામો ખૂબ જ મોટા હતા.
મારો સરેરાશ સર્ચ સમય 320ms થી ઘટીને 12ms થઈ ગયો. તે 27 ગણો ઝડપી છે. મારો કુલ cache hit rate 73% છે. મોટાભાગની ક્વેરીઝ મારા ડેટાબેઝ સુધી પહોંચતી જ નથી.
જો તમે MCP સર્વર બનાવો છો, તો આ કરો:
- વ્યક્તિગત ઉપયોગ માટે: In-memory cache નો ઉપયોગ કરો. તે અચાનક થતા ટાઈમઆઉટને અટકાવે છે.
- પબ્લિક સર્વિસીસ માટે: Redis સાથે બે-સ્તરીય અભિગમનો ઉપયોગ કરો. તે ક્રેશ થતા અટકાવે છે અને ઝડપ વધારે છે.
Caching એ વિશ્વસનીયતા (reliability) વિશે છે. તે રિટ્રાય અને કનેક્શન નિષ્ફળતાના ચક્રને અટકાવે છે.
Optional learning community: https://t.me/GyaanSetuAi
