Hyperdrive ಎಂಬುದು ಒಂದು managed connection-pooling ಸೇವೆಯಾಗಿದ್ದು, ಇದು Workers ಅನ್ನು PostgreSQL ಡೇಟಾಬೇಸ್ಗಳೊಂದಿಗೆ ನೇರವಾಗಿ ಸಂವಹನ ನಡೆಸಲು ಅನುವು ಮಾಡಿಕೊಡುತ್ತದೆ – vector search ಗಾಗಿ pgvector extension ಬಳಸುವ ಡೇಟಾಬೇಸ್ಗಳು ಸೇರಿದಂತೆ. ಸರ್ವರ್ಗೆ ಹತ್ತಿರವಿರುವ ಮರುಬಳಕೆ ಮಾಡಬಹುದಾದ ಡೇಟಾಬೇಸ್ ಕನೆಕ್ಷನ್ಗಳ ಗುಂಪನ್ನು ಇರಿಸುವ ಮೂಲಕ, Hyperdrive ಎಂಬುದು edge AI workloads ಗಳಿಗೆ ದೀರ್ಘಕಾಲದಿಂದ ಅಡ್ಡಿಯಾಗುತ್ತಿರುವ handshake overhead ಅನ್ನು ಕಡಿಮೆ ಮಾಡುತ್ತದೆ.
Why Workers and PostgreSQL clash
Cloudflare Workers ಎಂಬುದು ಡಜನ್ಗಟ್ಟಲೆ edge ಸ್ಥಳಗಳಲ್ಲಿ short-lived JavaScript functions ಗಳಾಗಿ ಕಾರ್ಯನಿರ್ವಹಿಸುತ್ತವೆ. ಪ್ರತಿಯೊಂದು ಹೊಸ ವಿನಂತಿಯು (request) ಹೊಸ ಪ್ರಕ್ರಿಯೆಯನ್ನು ಪ್ರಾರಂಭಿಸುತ್ತದೆ ಮತ್ತು ಸಾಮಾನ್ಯವಾಗಿ backend ಡೇಟಾಬೇಸ್ಗೆ ಹೊಸ TCP connection ಅನ್ನು ತೆರೆಯುವುದು ಸಾಮಾನ್ಯ ಮಾದರಿಯಾಗಿದೆ. ಆದರೆ, PostgreSQL ಪ್ರತಿ client process ಗಾಗಿ ಸ್ಥಿರವಾದ connection ಅನ್ನು ನಿರೀಕ್ಷಿಸುತ್ತದೆ ಮತ್ತು ಒಟ್ಟು ಏಕಕಾಲಿಕ (simultaneous) connections ಸಂಖ್ಯೆಯನ್ನು ಮಿತಿಗೊಳಿಸುತ್ತದೆ. ಇದರ ಪರಿಣಾಮವಾಗಿ ಎರಡು ಸಮಸ್ಯೆಗಳು ಎದುರಾಗುತ್ತವೆ:
- High connection cost – connection ಅನ್ನು ಸ್ಥಾಪಿಸಲು authentication ಮತ್ತು protocol negotiation ಗಾಗಿ ಹಲವಾರು round trips ಅಗತ್ಯವಿರುತ್ತದೆ. ಈ round trips ಪ್ರತಿ ವಿನಂತಿಗೆ latency ಅನ್ನು ಹೆಚ್ಚಿಸುತ್ತವೆ.
- Connection limits – Workers ಸಾವಿರಾರು concurrent executions ವರೆಗೆ scale ಆಗಬಹುದು, ಇದು PostgreSQL ನ connection pool ಅನ್ನು ಶೀಘ್ರವಾಗಿ ಖಾಲಿ ಮಾಡುತ್ತದೆ ಮತ್ತು ಡೇಟಾಬೇಸ್ ಕ್ರಾಶ್ ಆಗುವ ಸಾಧ್ಯತೆಯನ್ನೂ ಉಂಟುಮಾಡುತ್ತದೆ.
How Hyperdrive bridges the gap
Hyperdrive ಎಂಬುದು Worker ಮತ್ತು ಡೇಟಾಬೇಸ್ ನಡುವೆ ಇರುತ್ತದೆ, ಇದು PostgreSQL instance ಗೆ ನೆಟ್ವರ್ಕ್ ದೃಷ್ಟಿಕೋನದಿಂದ ಹತ್ತಿರವಿರುವ ಸರ್ವರ್ನಲ್ಲಿ persistent connections ಗಳ pool ಅನ್ನು ನಿರ್ವಹಿಸುತ್ತದೆ. Worker ನ ದೃಷ್ಟಿಕೋನದಿಂದ ನೋಡಿದರೆ ಬದಲಾವಣೆಯೆಂದರೆ ಕೇವಲ ಹೊಸ connection string ಮಾತ್ರ. ಆಂತರಿಕವಾಗಿ, ಈ proxy ಪ್ರತಿ ಹೊಸ query ಗಾಗಿ ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ connection ಅನ್ನು ಮರುಬಳಕೆ ಮಾಡುತ್ತದೆ, ಇದರಿಂದ handshake ವೆಚ್ಚವು ತಪ್ಪುತ್ತದೆ.
Setup ಅನ್ನು ಉದ್ದೇಶಪೂರ್ವಕವಾಗಿ ಲೈಟ್ವೇಟ್ (lightweight) ಮಾಡಲಾಗಿದೆ:
- ಮೂಲ ಡೇಟಾಬೇಸ್ URL ಅನ್ನು ಒದಗಿಸುವ ಮೂಲಕ Hyperdrive instance ಅನ್ನು ರಚಿಸಲು Wrangler CLI (Cloudflare ನ command-line tool) ಅನ್ನು ಬಳಸಿ.
wrangler.tomlಕಾನ್ಫಿಗರೇಶನ್ ಫೈಲ್ಗೆ ಜನರೇಟ್ ಮಾಡಲಾದ Hyperdrive binding ಅನ್ನು ಸೇರಿಸಿ.- Worker ಕೋಡ್ನಲ್ಲಿ
node-postgresನಂತಹ ಹೊಂದಾಣಿಕೆಯ driver ಅನ್ನು ಬಳಸಿ; ಈ driver Hyperdrive endpoint ಅನ್ನು ಸಾಮಾನ್ಯ PostgreSQL ಸರ್ವರ್ ಆಗಿ ನೋಡುತ್ತದೆ.
ಡೇಟಾಬೇಸ್ ಪಾಸ್ವರ್ಡ್ ಕೇವಲ Hyperdrive ಕಾನ್ಫಿಗರೇಶನ್ನಲ್ಲಿ ಇರುವುದರಿಂದ, ಅದು Worker source code ನಲ್ಲಿ ಎಂದಿಗೂ ಕಾಣಿಸಿಕೊಳ್ಳುವುದಿಲ್ಲ, ಇದು attack surface ಅನ್ನು ಕಡಿಮೆ ಮಾಡುತ್ತದೆ.
Practical tips for vector search
pgvector ಬಳಸುವ vector-search workloads ಗಳು ಪ್ರತಿ query ಗೂ ಬದಲಾಗುವ ದೊಡ್ಡ floating-point arrays ಗಳನ್ನು ಒಳಗೊಂಡಿರುತ್ತವೆ. Hyperdrive ನ ಡಿಫಾಲ್ಟ್ ವರ್ತನೆಯಲ್ಲಿ read cache ಇರುತ್ತದೆ, ಇದು ನಿರಂತರವಾಗಿ ಬದಲಾಗುವ ಡೇಟಾ ಜೊತೆಗೆ ಹೊಂದಾಣಿಕೆಯಾಗದೆ ಸಮಸ್ಯೆ ಉಂಟುಮಾಡಬಹುದು. ಫಲಿತಾಂಶಗಳು ತಾಜಾವಾಗಿರಲು (fresh), caching ಅನ್ನು ಡಿಸೇಬಲ್ ಮಾಡಿ ಎರಡನೇ Hyperdrive ಕಾನ್ಫಿಗರೇಶನ್ ಅನ್ನು ಪ್ರಾರಂಭಿಸಿ.
ದೀರ್ಘಕಾಲದ transactions ಮತ್ತೊಂದು ತೊಂದರೆಯಾಗಿದೆ. ಬಾಹ್ಯ AI model ಪ್ರತಿಕ್ರಿಯೆಗಾಗಿ ಕಾಯುವಾಗ ಡೇಟಾಬೇಸ್ connection ಅನ್ನು ಹಿಡಿದಿಟ್ಟುಕೊಳ್ಳುವುದು pool ನಲ್ಲಿ ಒಂದು slot ಅನ್ನು ಬಳಸಿಕೊಳ್ಳುತ್ತದೆ ಮತ್ತು pooling ನ ಉದ್ದೇಶವನ್ನೇ ತಪ್ಪಿಸುತ್ತದೆ. ಶಿಫಾರಸು ಮಾಡಲಾದ ಮಾದರಿ (pattern) ಹೀಗಿದೆ:
- ಒಂದು transaction ಅನ್ನು ತೆರೆಯಿರಿ.
- Query ಅನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸಿ.
- ತಕ್ಷಣವೇ commit ಮಾಡಿ.
- Transaction ಗಿಂತ ಹೊರಗೆ AI model ಅನ್ನು ಕರೆಯಿರಿ.
pgvector parameters ಗಳನ್ನು fine-tune ಮಾಡುವುದು (ಉದಾಹರಣೆಗೆ, search accuracy ಅನ್ನು ನಿಯಂತ್ರಿಸುವ hnsw.ef_search setting) ಒಂದು ಸಣ್ಣ transaction ಒಳಗೆ SET LOCAL statement ಬಳಸಿ ಮಾಡಬಹುದು. ಇದು ಬದಲಾವಣೆಯು ಪ್ರಸ್ತುತ query ಗೆ ಮಾತ್ರ ಅನ್ವಯವಾಗುವಂತೆ ನೋಡಿಕೊಳ್ಳುತ್ತದೆ ಮತ್ತು pool ಅನ್ನು ಹಂಚಿಕೊಳ್ಳುವ ಇತರ Workers ಮೇಲೆ ಪರಿಣಾಮ ಬೀರುವುದಿಲ್ಲ.
Limits that remain
Hyperdrive ಡೇಟಾಬೇಸ್ ಅನ್ನು ಸ್ಥಳಾಂತರಿಸುವುದಿಲ್ಲ. ಒಂದು ವೇಳೆ PostgreSQL ಸರ್ವರ್ ದೂರದ cloud region ನಲ್ಲಿ ಇದ್ದರೆ, latency ಇನ್ನೂ ಆ ಭೌತಿಕ ದೂರದಿಂದ ನಿರ್ಧರಿಸಲ್ಪಡುತ್ತದೆ. Cloudflare ನ “Smart Placement” ಫೀಚರ್, Hyperdrive instance ಹೊಂದಿರುವ ಹತ್ತಿರದ edge node ಗೆ Workers ಅನ್ನು route ಮಾಡುವ ಮೂಲಕ ಸಹಾಯ ಮಾಡಬಹುದು, ಆದರೆ ಇದು ಮೂಲ ನೆಟ್ವರ್ಕ್ round-trip ಅನ್ನು ಇಲ್ಲದಂತೆ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ.
Caching layer, ಸ್ಥಿರವಾದ (static) reads ಗಾಗಿ ಉಪಯುಕ್ತವಾಗಿದ್ದರೂ, ಪ್ರತಿ ವಿನಂತಿಗೆ ಬದಲಾಗುವ vector data ಮೇಲೆ ಪದೇ ಪದೇ miss ಆಗಬಹುದು. ડેವಲಪರ್ಗಳು cache hits ಮತ್ತು search ಫಲಿತಾಂಶಗಳ ತಾಜಾತನ (freshness) ನಡುವಿನ ಸಮತೋಲನವನ್ನು ಪರಿಗಣಿಸಬೇಕಾಗುತ್ತದೆ.
When to pick an alternative
ಒಂದು ಅಪ್ಲಿಕೇಶನ್ಗೆ relational joins ಇಲ್ಲದೆ ಕೇವಲ ಶುದ್ಧ vector storage ಅಗತ್ಯವಿದ್ದರೆ, Cloudflare 'Vectorize' ಎಂಬ ಮೀಸಲಾದ ಸೇವೆಯನ್ನು ನೀಡುತ್ತದೆ. Vectorize ಎಂಬುದು vectors ಅನ್ನು ನೇರವಾಗಿ edge ನಲ್ಲಿ ಸಂಗ್ರಹಿಸುತ್ತದೆ ಮತ್ತು PostgreSQL backend ಅಗತ್ಯವನ್ನು ತೆಗೆದುಹಾಕುತ್ತದೆ. ಆದರೆ, vectors ಗಳನ್ನು ಬಳಕೆದಾರರ ಪ್ರೊಫೈಲ್ಗಳು ಅಥವಾ ವಹಿವಾಟಿನ ಇತಿಹಾಸದಂತಹ (transaction histories) ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ relational tables ಗಳೊಂದಿಗೆ ಸೇರಿಸಬೇಕಾದಾಗ Hyperdrive ಉತ್ತಮ ಆಯ್ಕೆಯಾಗಿ ಉಳಿಯುತ್ತದೆ.
Takeaway
Hyperdrive ಎಂಬುದು edge ડેವಲಪರ್ಗಳಿಗೆ ತಮ್ಮ PostgreSQL connection ಮಿತಿಗಳನ್ನು ಮೀರಿ ಹೋಗದಂತೆ AI-driven vector searches ಅನ್ನು ನಡೆಸಲು ಒಂದು ಪ್ರಾಯೋಗಿಕ ಸಾಧನವನ್ನು ನೀಡುತ್ತದೆ. ಇದು handshake latency ಅನ್ನು ಕಡಿಮೆ ಮಾಡುತ್ತದೆ, credentials ಅನ್ನು ಕೇಂದ್ರೀಕರಿಸುತ್ತದೆ ಮತ್ತು caching ಹಾಗೂ transaction ಉದ್ದದ ಮೇಲೆ ಸೂಕ್ಷ್ಮ ನಿಯಂತ್ರಣವನ್ನು ನೀಡುತ್ತದೆ. ಈ ಸೇವೆಯು edge ಮತ್ತು ಡೇಟಾಬೇಸ್ ನಡುವಿನ ಮೂಲಭೂತ ದೂರವನ್ನು ಅಳಿಸುವುದಿಲ್ಲ ಮತ್ತು cache-misses ಒಂದು ಕಾಳಜಿಯ ವಿಷಯವಾಗಿಯೇ ಉಳಿಯುತ್ತದೆ, ಆದರೆ relational joins ಮತ್ತು vector similarity ಎರಡೂ ಅಗತ್ಯವಿರುವ workloads ಗಾಗಿ, Hyperdrive ಎಂಬುದು ಸ್ಕೇलेबल ಮತ್ತು ಕಡಿಮೆ-latency edge stack ಗಾಗಿ ಅತ್ಯಂತ ನೇರವಾದ ಮಾರ್ಗವಾಗಿದೆ.
