রিমোট ক্যাশিং

এই পৃষ্ঠাটি রিমোট ক্যাশে কভার করে, ক্যাশে হোস্ট করার জন্য একটি সার্ভার সেট আপ করে এবং রিমোট ক্যাশে ব্যবহার করে বিল্ডগুলি চালায়।

একটি দূরবর্তী ক্যাশে বিকাশকারীদের একটি দল এবং/অথবা একটি অবিচ্ছিন্ন ইন্টিগ্রেশন (CI) সিস্টেম দ্বারা বিল্ড আউটপুট ভাগ করে নেওয়ার জন্য ব্যবহার করা হয়। আপনার বিল্ড পুনরুত্পাদনযোগ্য হলে, একটি মেশিন থেকে আউটপুট নিরাপদে অন্য মেশিনে পুনরায় ব্যবহার করা যেতে পারে, যা বিল্ডগুলিকে উল্লেখযোগ্যভাবে দ্রুততর করতে পারে।

ওভারভিউ

ব্যাজেল একটি বিল্ডকে বিচ্ছিন্ন ধাপে ভেঙ্গে দেয়, যাকে অ্যাকশন বলা হয়। প্রতিটি কর্মের ইনপুট, আউটপুট নাম, একটি কমান্ড লাইন এবং পরিবেশের ভেরিয়েবল রয়েছে। প্রয়োজনীয় ইনপুট এবং প্রত্যাশিত আউটপুট প্রতিটি কর্মের জন্য স্পষ্টভাবে ঘোষণা করা হয়।

আপনি বিল্ড আউটপুটগুলির জন্য একটি দূরবর্তী ক্যাশে হিসাবে একটি সার্ভার সেট আপ করতে পারেন, যা এই অ্যাকশন আউটপুট। এই আউটপুটগুলি আউটপুট ফাইলের নামের একটি তালিকা এবং তাদের বিষয়বস্তুর হ্যাশ নিয়ে গঠিত। একটি দূরবর্তী ক্যাশের সাহায্যে, আপনি স্থানীয়ভাবে প্রতিটি নতুন আউটপুট তৈরি করার পরিবর্তে অন্য ব্যবহারকারীর বিল্ড থেকে বিল্ড আউটপুট পুনরায় ব্যবহার করতে পারেন।

দূরবর্তী ক্যাশিং ব্যবহার করতে:

  • ক্যাশের ব্যাকএন্ড হিসাবে একটি সার্ভার সেট আপ করুন
  • রিমোট ক্যাশে ব্যবহার করতে Bazel বিল্ড কনফিগার করুন
  • Bazel সংস্করণ 0.10.0 বা পরবর্তী ব্যবহার করুন

রিমোট ক্যাশে দুটি ধরণের ডেটা সঞ্চয় করে:

  • অ্যাকশন ক্যাশে, যা অ্যাকশন হ্যাশ থেকে অ্যাকশন ফলাফলের মেটাডেটার মানচিত্র।
  • আউটপুট ফাইলের একটি বিষয়বস্তু-অ্যাড্রেসেবল স্টোর (CAS)।

মনে রাখবেন যে দূরবর্তী ক্যাশে অতিরিক্তভাবে প্রতিটি কাজের জন্য stdout এবং stderr সংরক্ষণ করে। এইভাবে ব্যাজেলের stdout/stderr পরিদর্শন করা ক্যাশে হিট অনুমান করার জন্য একটি ভাল সংকেত নয়।

কিভাবে একটি বিল্ড রিমোট ক্যাশিং ব্যবহার করে

একবার একটি সার্ভার রিমোট ক্যাশে হিসাবে সেট আপ হয়ে গেলে, আপনি একাধিক উপায়ে ক্যাশে ব্যবহার করেন:

  • রিমোট ক্যাশে পড়ুন এবং লিখুন
  • নির্দিষ্ট লক্ষ্য ব্যতীত দূরবর্তী ক্যাশে পড়ুন এবং/অথবা লিখুন
  • শুধুমাত্র দূরবর্তী ক্যাশে থেকে পড়া
  • রিমোট ক্যাশে একেবারেই ব্যবহার করবেন না

আপনি যখন একটি Bazel বিল্ড চালান যা রিমোট ক্যাশে পড়তে এবং লিখতে পারে, বিল্ডটি এই পদক্ষেপগুলি অনুসরণ করে:

  1. Bazel লক্ষ্যগুলির গ্রাফ তৈরি করে যা তৈরি করা প্রয়োজন, এবং তারপর প্রয়োজনীয় ক্রিয়াগুলির একটি তালিকা তৈরি করে৷ এই ক্রিয়াগুলির প্রতিটি ইনপুট এবং আউটপুট ফাইলের নাম ঘোষণা করেছে।
  2. Bazel বিদ্যমান বিল্ড আউটপুটগুলির জন্য আপনার স্থানীয় মেশিনটি পরীক্ষা করে এবং এটি যেটি খুঁজে পায় তা পুনরায় ব্যবহার করে।
  3. ব্যাজেল বিদ্যমান বিল্ড আউটপুটগুলির জন্য ক্যাশে পরীক্ষা করে। আউটপুট পাওয়া গেলে, Bazel আউটপুট পুনরুদ্ধার করে। এটি একটি ক্যাশে আঘাত.
  4. প্রয়োজনীয় ক্রিয়াগুলির জন্য যেখানে আউটপুটগুলি পাওয়া যায়নি, Bazel স্থানীয়ভাবে ক্রিয়াগুলি সম্পাদন করে এবং প্রয়োজনীয় বিল্ড আউটপুট তৈরি করে।
  5. রিমোট ক্যাশে নতুন বিল্ড আউটপুট আপলোড করা হয়।

ক্যাশের ব্যাকএন্ড হিসাবে একটি সার্ভার সেট আপ করা হচ্ছে

ক্যাশের ব্যাকএন্ড হিসাবে কাজ করার জন্য আপনাকে একটি সার্ভার সেট আপ করতে হবে। একটি HTTP/1.1 সার্ভার Bazel এর ডেটাকে অস্বচ্ছ বাইট হিসাবে বিবেচনা করতে পারে এবং অনেকগুলি বিদ্যমান সার্ভার একটি দূরবর্তী ক্যাশিং ব্যাকএন্ড হিসাবে ব্যবহার করা যেতে পারে। Bazel এর HTTP ক্যাশিং প্রোটোকল যা রিমোট ক্যাশিং সমর্থন করে।

আপনি ব্যাকএন্ড সার্ভার নির্বাচন, সেট আপ এবং রক্ষণাবেক্ষণের জন্য দায়ী যা ক্যাশে করা আউটপুট সংরক্ষণ করবে। একটি সার্ভার নির্বাচন করার সময়, বিবেচনা করুন:

  • নেটওয়ার্কিং গতি। উদাহরণস্বরূপ, যদি আপনার দল একই অফিসে থাকে তবে আপনি নিজের স্থানীয় সার্ভার চালাতে চাইতে পারেন।
  • নিরাপত্তা দূরবর্তী ক্যাশে আপনার বাইনারি থাকবে এবং তাই সুরক্ষিত হওয়া দরকার।
  • ব্যবস্থাপনা সহজ. উদাহরণস্বরূপ, Google ক্লাউড স্টোরেজ একটি সম্পূর্ণরূপে পরিচালিত পরিষেবা৷

দূরবর্তী ক্যাশে ব্যবহার করা যেতে পারে যে অনেক ব্যাকএন্ড আছে. কিছু বিকল্প অন্তর্ভুক্ত:

nginx

nginx একটি ওপেন সোর্স ওয়েব সার্ভার। এর [ওয়েবডিএভি মডিউল] সহ, এটি ব্যাজেলের জন্য একটি দূরবর্তী ক্যাশে হিসাবে ব্যবহার করা যেতে পারে। ডেবিয়ান এবং উবুন্টুতে আপনি nginx-extras প্যাকেজ ইনস্টল করতে পারেন। MacOS nginx এ Homebrew এর মাধ্যমে উপলব্ধ:

brew tap denji/nginx
brew install nginx-full --with-webdav

নীচে nginx এর জন্য একটি উদাহরণ কনফিগারেশন আছে। মনে রাখবেন যে আপনাকে /path/to/cache/dir একটি বৈধ ডিরেক্টরিতে পরিবর্তন করতে হবে যেখানে nginx-এর লেখা এবং পড়ার অনুমতি রয়েছে। আপনার যদি বড় আউটপুট ফাইল থাকে তবে আপনাকে client_max_body_size বিকল্পটিকে একটি বড় মান পরিবর্তন করতে হতে পারে। সার্ভারের অন্যান্য কনফিগারেশন যেমন প্রমাণীকরণের প্রয়োজন হবে।

nginx.confserver বিভাগের জন্য কনফিগারেশনের উদাহরণ:

location /cache/ {
  # The path to the directory where nginx should store the cache contents.
  root /path/to/cache/dir;
  # Allow PUT
  dav_methods PUT;
  # Allow nginx to create the /ac and /cas subdirectories.
  create_full_put_path on;
  # The maximum size of a single file.
  client_max_body_size 1G;
  allow all;
}

বেজেল-রিমোট

bazel-remote হল একটি ওপেন সোর্স রিমোট বিল্ড ক্যাশে যা আপনি আপনার পরিকাঠামোতে ব্যবহার করতে পারেন। এটি 2018 সালের শুরু থেকে বেশ কয়েকটি কোম্পানিতে উৎপাদনে সফলভাবে ব্যবহার করা হয়েছে। উল্লেখ্য যে Bazel প্রকল্পটি বেজেল-রিমোটের জন্য প্রযুক্তিগত সহায়তা প্রদান করে না।

এই ক্যাশে ডিস্কে বিষয়বস্তু সঞ্চয় করে এবং একটি ঊর্ধ্ব সঞ্চয় সীমা কার্যকর করতে এবং অব্যবহৃত শিল্পকর্ম পরিষ্কার করার জন্য আবর্জনা সংগ্রহের ব্যবস্থা করে। ক্যাশে একটি [ডকার ইমেজ] হিসাবে উপলব্ধ এবং এর কোড GitHub এ উপলব্ধ। REST এবং gRPC রিমোট ক্যাশে API উভয়ই সমর্থিত।

এটি কীভাবে ব্যবহার করবেন তার নির্দেশাবলীর জন্য GitHub পৃষ্ঠাটি পড়ুন।

গুগল ক্লাউড স্টোরেজ

[গুগল ক্লাউড স্টোরেজ] হল একটি সম্পূর্ণরূপে পরিচালিত অবজেক্ট স্টোর যা একটি HTTP API প্রদান করে যা Bazel এর রিমোট ক্যাশিং প্রোটোকলের সাথে সামঞ্জস্যপূর্ণ। এটির জন্য আপনার বিলিং সক্ষম সহ একটি Google ক্লাউড অ্যাকাউন্ট থাকা প্রয়োজন৷

ক্যাশে হিসাবে ক্লাউড স্টোরেজ ব্যবহার করতে:

  1. একটি স্টোরেজ বালতি তৈরি করুন । নিশ্চিত করুন যে আপনি একটি বালতি অবস্থান নির্বাচন করেছেন যা আপনার সবচেয়ে কাছের, কারণ দূরবর্তী ক্যাশের জন্য নেটওয়ার্ক ব্যান্ডউইথ গুরুত্বপূর্ণ।

  2. ক্লাউড স্টোরেজে প্রমাণীকরণের জন্য Bazel-এর জন্য একটি পরিষেবা অ্যাকাউন্ট তৈরি করুন। একটি পরিষেবা অ্যাকাউন্ট তৈরি করা দেখুন।

  3. একটি গোপন JSON কী তৈরি করুন এবং তারপর প্রমাণীকরণের জন্য এটি Bazel-এ পাস করুন৷ চাবিটি নিরাপদে সংরক্ষণ করুন, কারণ যে কেউ আপনার GCS বালতিতে/থেকে যথেচ্ছ ডেটা পড়তে এবং লিখতে পারে।

  4. আপনার Bazel কমান্ডে নিম্নলিখিত পতাকা যোগ করে ক্লাউড স্টোরেজের সাথে সংযোগ করুন:

    • পতাকা ব্যবহার করে Bazel-এ নিম্নলিখিত URLটি পাস করুন: --remote_cache=https://storage.googleapis.com /bucket-name যেখানে bucket-name হল আপনার স্টোরেজ বাকেটের নাম৷
    • পতাকা ব্যবহার করে প্রমাণীকরণ কী পাস করুন: --google_credentials= /path/to/your/secret-key .json , অথবা --google_default_credentials অ্যাপ্লিকেশন প্রমাণীকরণ ব্যবহার করতে।
  5. পুরানো ফাইলগুলি স্বয়ংক্রিয়ভাবে মুছে ফেলার জন্য আপনি ক্লাউড স্টোরেজ কনফিগার করতে পারেন। এটি করতে, অবজেক্ট লাইফসাইকেল পরিচালনা দেখুন।

অন্যান্য সার্ভার

আপনি যেকোনো HTTP/1.1 সার্ভার সেট আপ করতে পারেন যা ক্যাশের ব্যাকএন্ড হিসাবে PUT এবং GET সমর্থন করে। ব্যবহারকারীরা হ্যাজেলকাস্ট , অ্যাপাচি httpd , এবং AWS S3 এর মতো ক্যাশিং ব্যাকএন্ডে সাফল্যের কথা জানিয়েছেন।

প্রমাণীকরণ

এইচটিটিপি বেসিক প্রমাণীকরণের জন্য সংস্করণ 0.11.0 সমর্থন Bazel এ যোগ করা হয়েছে। আপনি দূরবর্তী ক্যাশে URL এর মাধ্যমে Bazel-এ একটি ব্যবহারকারীর নাম এবং পাসওয়ার্ড পাঠাতে পারেন। সিনট্যাক্স হল https://username:password@hostname.com:port/path । নোট করুন যে HTTP বেসিক প্রমাণীকরণ নেটওয়ার্কে প্লেইনটেক্সটে ব্যবহারকারীর নাম এবং পাসওয়ার্ড প্রেরণ করে এবং তাই এটি সর্বদা HTTPS এর সাথে ব্যবহার করা গুরুত্বপূর্ণ।

HTTP ক্যাশিং প্রোটোকল

Bazel HTTP/1.1 এর মাধ্যমে দূরবর্তী ক্যাশিং সমর্থন করে। প্রোটোকলটি ধারণাগতভাবে সহজ: বাইনারি ডেটা (BLOB) PUT অনুরোধের মাধ্যমে আপলোড করা হয় এবং GET অনুরোধের মাধ্যমে ডাউনলোড করা হয়। অ্যাকশন ফলাফলের মেটাডেটা পাথ /ac/ এর অধীনে সংরক্ষণ করা হয় এবং আউটপুট ফাইলগুলি পাথ /cas/ এর অধীনে সংরক্ষণ করা হয়।

উদাহরণস্বরূপ, http://localhost:8080/cache এর অধীনে চলমান একটি দূরবর্তী ক্যাশে বিবেচনা করুন। SHA256 হ্যাশ 01ba4719... সহ একটি অ্যাকশনের জন্য অ্যাকশন ফলাফলের মেটাডেটা ডাউনলোড করার জন্য একটি Bazel অনুরোধ নিম্নরূপ দেখাবে:

GET /cache/ac/01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b HTTP/1.1
Host: localhost:8080
Accept: */*
Connection: Keep-Alive

CAS এ SHA256 হ্যাশ 15e2b0d3... সহ একটি আউটপুট ফাইল আপলোড করার জন্য একটি Bazel অনুরোধ নিম্নরূপ দেখাবে:

PUT /cache/cas/15e2b0d3c33891ebb0f1ef609ec419420c20e320ce94c65fbc8c3312448eb225 HTTP/1.1
Host: localhost:8080
Accept: */*
Content-Length: 9
Connection: Keep-Alive

0x310x320x330x340x350x360x370x380x39

রিমোট ক্যাশে ব্যবহার করে Bazel চালান

একবার একটি সার্ভার রিমোট ক্যাশে হিসাবে সেট আপ হয়ে গেলে, রিমোট ক্যাশে ব্যবহার করার জন্য আপনাকে আপনার Bazel কমান্ডে পতাকা যুক্ত করতে হবে। নীচে কনফিগারেশন এবং তাদের পতাকা তালিকা দেখুন.

আপনার কনফিগার প্রমাণীকরণেরও প্রয়োজন হতে পারে, যা আপনার নির্বাচিত সার্ভারের জন্য নির্দিষ্ট।

আপনি এই পতাকাগুলিকে একটি .bazelrc ফাইলে যুক্ত করতে চাইতে পারেন যাতে প্রতিবার Bazel চালানোর সময় আপনাকে সেগুলি নির্দিষ্ট করতে হবে না৷ আপনার প্রকল্প এবং দলের গতিশীলতার উপর নির্ভর করে, আপনি একটি .bazelrc ফাইলে পতাকা যোগ করতে পারেন যা হল:

  • আপনার স্থানীয় মেশিনে
  • আপনার প্রকল্পের কর্মক্ষেত্রে, টিমের সাথে ভাগ করা হয়েছে৷
  • সিআই সিস্টেমে

রিমোট ক্যাশে থেকে পড়ুন এবং লিখুন

রিমোট ক্যাশে লেখার ক্ষমতা কার আছে সেদিকে খেয়াল রাখুন। আপনি শুধুমাত্র আপনার CI সিস্টেম রিমোট ক্যাশে লিখতে সক্ষম হতে চাইতে পারেন।

রিমোট ক্যাশে থেকে পড়তে এবং লিখতে নিম্নলিখিত পতাকাটি ব্যবহার করুন:

build --remote_cache=http://your.host:port

HTTP ছাড়াও, নিম্নলিখিত প্রোটোকলগুলিও সমর্থিত: HTTPS , grpc , grpcs

শুধুমাত্র দূরবর্তী ক্যাশে থেকে পড়ার জন্য উপরের একটি ছাড়াও নিম্নলিখিত পতাকাটি ব্যবহার করুন:

build --remote_upload_local_results=false

দূরবর্তী ক্যাশে ব্যবহার করা থেকে নির্দিষ্ট লক্ষ্যগুলি বাদ দিন

দূরবর্তী ক্যাশে ব্যবহার করা থেকে নির্দিষ্ট লক্ষ্যগুলি বাদ দিতে, no-cache দিয়ে লক্ষ্যটিকে ট্যাগ করুন। উদাহরণ স্বরূপ:

java_library(
    name = "target",
    tags = ["no-cache"],
)

রিমোট ক্যাশে থেকে বিষয়বস্তু মুছুন

দূরবর্তী ক্যাশে থেকে সামগ্রী মুছে ফেলা আপনার সার্ভার পরিচালনার অংশ। আপনি কিভাবে রিমোট ক্যাশে থেকে বিষয়বস্তু মুছে ফেলবেন তা নির্ভর করে আপনি যে সার্ভারটিকে ক্যাশে হিসেবে সেট করেছেন তার উপর। আউটপুট মুছে ফেলার সময়, হয় সম্পূর্ণ ক্যাশে মুছুন, অথবা পুরানো আউটপুট মুছুন।

ক্যাশে করা আউটপুটগুলি নাম এবং হ্যাশের সেট হিসাবে সংরক্ষণ করা হয়। বিষয়বস্তু মুছে ফেলার সময়, কোন আউটপুট একটি নির্দিষ্ট বিল্ডের অন্তর্গত তা আলাদা করার কোন উপায় নেই।

আপনি ক্যাশে থেকে সামগ্রী মুছতে চাইতে পারেন:

  • ক্যাশে বিষাক্ত হওয়ার পরে একটি পরিষ্কার ক্যাশে তৈরি করুন
  • পুরানো আউটপুট মুছে ফেলার মাধ্যমে ব্যবহৃত স্টোরেজের পরিমাণ হ্রাস করুন

ইউনিক্স সকেট

দূরবর্তী HTTP ক্যাশে ইউনিক্স ডোমেন সকেটের মাধ্যমে সংযোগ সমর্থন করে। আচরণটি --unix-socket পতাকার অনুরূপ। ইউনিক্স ডোমেইন সকেট কনফিগার করতে নিম্নলিখিত ব্যবহার করুন:

   build --remote_cache=http://your.host:port
   build --remote_cache_proxy=unix:/path/to/socket

এই বৈশিষ্ট্যটি উইন্ডোজে অসমর্থিত।

ডিস্ক ক্যাশে

Bazel দূরবর্তী ক্যাশে হিসাবে ফাইল সিস্টেমে একটি ডিরেক্টরি ব্যবহার করতে পারে। শাখা পরিবর্তন করার সময় এবং/অথবা একই প্রকল্পের একাধিক ওয়ার্কস্পেস, যেমন একাধিক চেকআউটে কাজ করার সময় বিল্ড আর্টিফ্যাক্টগুলি ভাগ করার জন্য এটি কার্যকর। যেহেতু Bazel ডিরেক্টরিটি আবর্জনা সংগ্রহ করে না, আপনি এই ডিরেক্টরিটির একটি পর্যায়ক্রমিক পরিচ্ছন্নতা স্বয়ংক্রিয় করতে চাইতে পারেন। নিম্নরূপ ডিস্ক ক্যাশে সক্ষম করুন:

build --disk_cache=path/to/build/cache

আপনি ~ উপনাম ব্যবহার করে --disk_cache ফ্ল্যাগে একটি ব্যবহারকারী-নির্দিষ্ট পাথ পাস করতে পারেন (Bazel বর্তমান ব্যবহারকারীর হোম ডিরেক্টরিকে প্রতিস্থাপন করবে)। প্রকল্পের চেক ইন .bazelrc ফাইলের মাধ্যমে একটি প্রকল্পের সমস্ত বিকাশকারীদের জন্য ডিস্ক ক্যাশে সক্রিয় করার সময় এটি কার্যকর হয়৷

জ্ঞাত সমস্যা

একটি বিল্ড করার সময় ইনপুট ফাইল পরিবর্তন

যখন একটি ইনপুট ফাইল একটি বিল্ড করার সময় পরিবর্তন করা হয়, তখন Bazel রিমোট ক্যাশে অবৈধ ফলাফল আপলোড করতে পারে। আপনি --experimental_guard_against_concurrent_changes পতাকা দিয়ে একটি পরিবর্তন সনাক্তকরণ সক্ষম করতে পারেন। কোন পরিচিত সমস্যা নেই এবং এটি ভবিষ্যতের রিলিজে ডিফল্টরূপে সক্রিয় করা হবে। আপডেটের জন্য [ইস্যু #3360] দেখুন। সাধারণত, বিল্ড করার সময় সোর্স ফাইলগুলি পরিবর্তন করা এড়িয়ে চলুন।

এনভায়রনমেন্ট ভেরিয়েবল একটি অ্যাকশনে লিক করছে

একটি কর্ম সংজ্ঞা পরিবেশের ভেরিয়েবল ধারণ করে। মেশিন জুড়ে রিমোট ক্যাশে হিট শেয়ার করার জন্য এটি একটি সমস্যা হতে পারে। উদাহরণস্বরূপ, বিভিন্ন $PATH ভেরিয়েবল সহ পরিবেশ ক্যাশে হিট শেয়ার করবে না। শুধুমাত্র --action_env এর মাধ্যমে স্পষ্টভাবে হোয়াইটলিস্ট করা এনভায়রনমেন্ট ভেরিয়েবলগুলিই অ্যাকশন সংজ্ঞায় অন্তর্ভুক্ত করা হয়েছে। Bazel এর Debian/Ubuntu প্যাকেজটি $PATH সহ পরিবেশ ভেরিয়েবলের একটি সাদা তালিকা সহ /etc/bazel.bazelrc ইনস্টল করতে ব্যবহৃত হয়। আপনি যদি প্রত্যাশার চেয়ে কম ক্যাশে হিট পান, তাহলে পরীক্ষা করুন যে আপনার পরিবেশে একটি পুরানো /etc/bazel.bazelrc ফাইল নেই।

Bazel একটি কর্মক্ষেত্রের বাইরে টুল ট্র্যাক করে না

Bazel বর্তমানে একটি কর্মক্ষেত্রের বাইরে টুল ট্র্যাক করে না। এটি একটি সমস্যা হতে পারে যদি, উদাহরণস্বরূপ, একটি ক্রিয়া /usr/bin/ থেকে একটি কম্পাইলার ব্যবহার করে। তারপর, বিভিন্ন কম্পাইলার ইনস্টল করা দুই ব্যবহারকারী ভুলভাবে ক্যাশে হিট শেয়ার করবে কারণ আউটপুট ভিন্ন কিন্তু তাদের একই অ্যাকশন হ্যাশ আছে। আপডেটের জন্য সংখ্যা #4558 দেখুন।

ডকার কন্টেইনারের ভিতরে বিল্ড চালানোর সময় ইনক্রিমেন্টাল ইন-মেমরি স্টেট হারিয়ে যায় Bazel সার্ভার/ক্লায়েন্ট আর্কিটেকচার ব্যবহার করে এমনকি যখন একক ডকার কন্টেইনারে চলছে। সার্ভারের দিকে, Bazel একটি ইন-মেমরি অবস্থা বজায় রাখে যা নির্মাণের গতি বাড়ায়। যখন CI-এর মতো ডকার কন্টেইনারগুলির ভিতরে বিল্ডগুলি চালানো হয়, তখন ইন-মেমরি অবস্থা হারিয়ে যায় এবং রিমোট ক্যাশে ব্যবহার করার আগে Bazelকে অবশ্যই এটি পুনর্নির্মাণ করতে হবে।