paint-brush
আমার জন্য সময় উড়তে ... রেন্ডারদ্বারা@johnjvester
1,655 পড়া
1,655 পড়া

আমার জন্য সময় উড়তে ... রেন্ডার

দ্বারা John Vester8m2023/02/14
Read on Terminal Reader
Read this story w/o Javascript

অতিদীর্ঘ; পড়তে

Heroku তাদের বিনামূল্যের পরিকল্পনা মুছে দিয়েছে, তাই আমি আমার প্রোটোটাইপ পণ্য এবং পরিষেবাগুলির জন্য রেন্ডারে স্থানান্তরিত করছি৷ আসুন দেখি রেন্ডার PaaS-এ রূপান্তর করা কতটা সহজ।
featured image - আমার জন্য সময় উড়তে ... রেন্ডার
John Vester HackerNoon profile picture


গার্টনার হাইপ চক্র , নীচের চিত্রিত, প্রযুক্তির বেশিরভাগ দিকগুলিতে প্রয়োগ করা যেতে পারে:


নতুন উদ্ভাবনগুলি তাদের নিজ নিজ চক্রে প্রবেশ করার সাথে সাথে, প্রত্যাশাগুলি অবশেষে উপলব্ধি করা হয় - যা গ্রহণের কিছু স্তরের দিকে নিয়ে যায়।


প্রতিটি উদ্ভাবনের লক্ষ্য হল উৎপাদনশীলতার মালভূমিতে পৌঁছানো যেখানে ভোক্তারা নির্ধারণ করেছেন যে উদ্ভাবন গ্রহণের পুরষ্কার যে কোনো পরিচিত ঝুঁকির চেয়ে অনেক বেশি।


একই সময়ে, এমন একটি বিন্দু রয়েছে যেখানে উত্পাদনশীলতার মালভূমি হ্রাস পেতে শুরু করে, যার ফলে সেই উদ্ভাবন থেকে দূরে সরে যায়। একটি সাধারণ উদাহরণ হল পেজার (বা বিপার), যা মোবাইল ফোন/ডিভাইসগুলি উত্পাদনশীলতার মালভূমিতে পৌঁছানোর আগে সাধারণ ছিল।


প্রযুক্তিবিদ হিসাবে, আমরা এমন বৈশিষ্ট্য, কাঠামো, পণ্য বা পরিষেবা সরবরাহ করার চেষ্টা করি যা উত্পাদনশীলতার মালভূমিকে বৃদ্ধি করে। আমরা যেগুলি ব্যবহার করি তাদের ক্ষেত্রেও একই কথা প্রযোজ্য।


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


যেহেতু আমি রেন্ডার PaaS ব্যবহার করে একটি ইতিবাচক অভিজ্ঞতা পেয়েছি, তাই আমি দেখতে চেয়েছিলাম যে আমি আমার Heroku অ্যাপ্লিকেশনগুলির একটিকে কত সহজে রূপান্তর করতে পারি, PostgreSQL গ্রহণ করতে পারি এবং রেন্ডারে স্থানান্তর করতে পারি। আমি এই দুই পর্বের সিরিজে সেই যাত্রার বর্ণনা দিচ্ছি:


  • পার্ট 1: আমরা আমার ব্যাকএন্ড পরিষেবাগুলি (স্প্রিং বুট এবং ক্লিয়ারডিবি মাইএসকিউএল) স্থানান্তরিত করার উপর ফোকাস করব।
  • পার্ট 2: আমরা আমার ফ্রন্টএন্ড অ্যাঙ্গুলার ক্লায়েন্ট পোর্টিং এবং মাইগ্রেট করার উপর ফোকাস করব।

কেন আমি রেন্ডার চয়ন

আপনি যদি আগে কখনও রেন্ডারের কথা না শুনে থাকেন তবে আমার আগের কিছু প্রকাশনা দেখুন:







রেন্ডার সম্পর্কে আমি যা উত্তেজনাপূর্ণ বলে মনে করি তা হল তারা জ্ঞানার্জনের ঢালে আরোহণ করতে থাকে এবং সক্রিয়ভাবে গ্রহণকারীদের জন্য উত্পাদনশীলতার মালভূমিকে স্বীকৃতি দেওয়ার জন্য একটি কঠিন সমাধান প্রদান করে।


যেমন আমি আমার নিবন্ধগুলিতে উল্লেখ করেছি, রেন্ডার একটি "জিরো ডিওঅপস" প্রতিশ্রুতি দেয়। এটি আমার চাহিদার সাথে পুরোপুরি সারিবদ্ধ কারণ আমার কাছে DevOps কাজগুলিতে ফোকাস করার সময় নেই।


হেরোকু প্ল্যাটফর্মের বেশ কয়েকটি জিনিস রয়েছে যা আমি খুব পছন্দ করি না:


  • দৈনিক পুনঃসূচনা আমার পরিষেবাগুলির একটির জন্য অপ্রত্যাশিত ডাউনটাইমের দিকে পরিচালিত করে।


  • এন্ট্রি-লেভেল (যা আমার সত্যিই দরকার) Heroku-এ পোস্টগ্রেস প্রতি মাসে চার ঘণ্টার ডাউনটাইমের অনুমতি দেয়।


  • ভোক্তাদের দৃষ্টিকোণ থেকে মূল্য নির্ধারণের মাত্রা ভালোভাবে মাপা যায় না।


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

একটি একক পরিষেবা রূপান্তর

আমি উপরে উল্লেখ করেছি, এটি একটি দুই-অংশের সিরিজের একটি অংশ, এবং আমি এই নিবন্ধে পরিষেবা স্তরের উপর ফোকাস করব। আমি যে পরিষেবাটি রূপান্তর করতে চাই তার নিম্নলিখিত বৈশিষ্ট্য রয়েছে:


  • স্প্রিং বুট RESTful API পরিষেবা


  • Heroku CloudAMQP (RabbitMQ) মেসেজ ব্রোকার


  • Heroku ClearDB (MySQL) ডেটাবেস (একক স্কিমা)


  • Okta ইন্টিগ্রেশন


Render PaaS এর দিকে, নতুন সার্ভিস ডিজাইন দেখতে এরকম হবে:


  • রেন্ডার ওয়েব সার্ভিস হোস্টিং স্প্রিং বুট RESTful API পরিষেবা (ডকারের মাধ্যমে)


  • RabbitMQ মেসেজ ব্রোকার হোস্টিং প্রাইভেট সার্ভিস রেন্ডার করুন (ডকারের মাধ্যমে)


  • একাধিক স্কিমা বিদ্যমান থাকার ক্ষমতা সহ Postgres রেন্ডার করুন


  • Okta ইন্টিগ্রেশন


নীচে দুটি বাস্তুতন্ত্রের একটি পাশাপাশি তুলনা করা হল:



রূপান্তরের জন্য আমার উচ্চ-স্তরের আক্রমণের পরিকল্পনা নিম্নরূপ:


রূপান্তরের জন্য Heroku প্রস্তুত করুন

শুরু করার আগে, সমস্ত বিদ্যমান Heroku পরিষেবাগুলিকে রক্ষণাবেক্ষণ মোডে রাখার সুপারিশ করা হয়৷ এটি যেকোনো ভোক্তাদের অ্যাপ্লিকেশন বা পরিষেবাগুলি অ্যাক্সেস করতে নিষেধ করবে৷


যদিও সোর্স কোড ইতিমধ্যেই ব্যাক আপ করা উচিত এবং একটি গিট-ভিত্তিক সংগ্রহস্থলে সংরক্ষণ করা উচিত, এটি একটি ডাটাবেস ব্যাকআপ সফলভাবে তৈরি করা হয়েছে তা নিশ্চিত করা একটি ভাল ধারণা।

হেরোকু পরিষেবার রূপান্তর

একটি রূপান্তর দৃষ্টিকোণ থেকে, আমার কাছে রূপান্তর করার জন্য দুটি আইটেম ছিল: পরিষেবাটি নিজেই এবং ClearDB (MySQL) ডাটাবেস।


আমার স্প্রিং বুট RESTful পরিষেবার রূপান্তরে খুব বেশি কাজ জড়িত ছিল না। প্রকৃতপক্ষে, আমি আমার পূর্ববর্তী প্রকল্পের জন্য যে পদ্ধতিটি ব্যবহার করেছি তা লাভ করতে সক্ষম হয়েছি।


ডাটাবেসের জন্য, আমাকে MySQL থেকে PostgreSQL তে রূপান্তর করতে হবে। আমার লক্ষ্য ছিল রেন্ডারের হেরোকু মাইগ্রেটর ব্যবহার করে সহজেই Heroku Postgres থেকে Render Postgres এ স্থানান্তরিত করা, কিন্তু আমার প্রথমে MySQL থেকে PostgreSQL তে রূপান্তর করতে হবে।


প্রাথমিকভাবে, আমি pgloader পাথ শুরু করেছিলাম, যা ডাটাবেস রূপান্তরের জন্য একটি সাধারণ পদ্ধতি বলে মনে হয়েছিল। যাইহোক, আমার M1-চিপ MacBook Pro ব্যবহার করার ফলে কিছু অপ্রত্যাশিত সমস্যা দেখা দিয়েছে।


পরিবর্তে, আমি MySQL কে PostgreSQL এ রূপান্তর করতে NMIG ব্যবহার করতে বেছে নিয়েছি। আরও তথ্যের জন্য, অনুগ্রহ করে নীচের " ডাটাবেস রূপান্তর থেকে হাইলাইটস " বিভাগটি দেখুন।

রেন্ডারে পরিষেবা তৈরি করুন

ডকারের ভিতরে চলমান ডাটাবেস এবং স্প্রিং বুট RESTful পরিষেবা রূপান্তর করার পরে, পরবর্তী পদক্ষেপটি ছিল স্প্রিং বুট RESTful API পরিষেবার জন্য একটি রেন্ডার ওয়েব পরিষেবা তৈরি করা।


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


যেহেতু আমারও একটি RabbitMQ পরিষেবার প্রয়োজন ছিল, তাই রেন্ডারে চলমান একটি RabbitMQ ব্যক্তিগত পরিষেবা তৈরি করতে আমি এই নির্দেশাবলী অনুসরণ করেছি৷ এর মধ্যে রয়েছে প্রসেস করা হয়নি এমন বার্তাগুলিকে টিকিয়ে রাখার জন্য অল্প পরিমাণ ডিস্ক স্টোরেজ স্থাপন করা।


অবশেষে, আমি স্প্রিং বুট RESTful API পরিষেবা এবং RabbitMQ বার্তা ব্রোকার উভয়ের জন্য রেন্ডার ড্যাশবোর্ডে প্রয়োজনীয় পরিবেশ ভেরিয়েবল তৈরি করেছি।

পরিষেবাগুলি শুরু এবং যাচাই করুন৷

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


একবার সবকিছু ঠিকঠাক হয়ে গেলে, আমার রেন্ডার ড্যাশবোর্ড নীচে দেখানো হয়েছে:


পরবর্তী পদক্ষেপ

এই মুহুর্তে যা বাকি ছিল তা হল হেরোকুতে এখনও চলমান ডেটাবেসগুলি মুছে ফেলা এবং হেরোকু ইকোসিস্টেম থেকে স্থানান্তরিত পরিষেবাগুলি সরিয়ে ফেলা।


Heroku ব্যবহার করার সময়, যেকোন সময় আমি আমার সার্ভিস রিপোজিটরির মাস্টার ব্রাঞ্চে কোড মার্জ করি, কোডটি স্বয়ংক্রিয়ভাবে মোতায়েন করা হয়, যদি আমি আমার সোর্স রিপোজিটরিতে Heroku এ স্থাপন করতে GitLab CI/CD ব্যবহার করি।


তবে রেন্ডারের সাথে সোর্স ফাইল রিপোজিটরিতে কোড যোগ করার দরকার নেই। আমাকে পরিষেবার জন্য রেন্ডার ড্যাশবোর্ডে বিল্ড এবং ডিপ্লয় শাখা নির্দিষ্ট করতে হবে:


আমি Zero DevOps প্রতিশ্রুতি পছন্দ করি।

ডাটাবেস রূপান্তর থেকে হাইলাইট

উপরের ধাপগুলি অনুসরণ করে, হেরোকু থেকে রেন্ডারে রূপান্তরটি মসৃণ এবং সফল ছিল। আমার জন্য সবচেয়ে বড় চ্যালেঞ্জ ছিল ডেটা কনভার্সন করা। একটি উচ্চ স্তরে, এটি বেশিরভাগই আমার ম্যাকবুক প্রো-এর টার্মিনাল থেকে কার্যকর করা কমান্ডের একটি সিরিজে ফুটে ওঠে।


প্রথমে, আমি ডকারের মাধ্যমে একটি স্থানীয় পোস্টগ্রেস উদাহরণ শুরু করেছি:


 docker run --publish 127.0.0.1:5432:5432 --name postgres -e POSTGRES_PASSWORD=dbo -d postgres


এর পরে, আমি নিম্নলিখিত কমান্ড (বা pgAdmin) ব্যবহার করে "উদাহরণ" নামে একটি ডাটাবেস তৈরি করেছি:


 createdb example


হেরোকুতে চলমান আমার ClearDB (MYSQL) উদাহরণকে স্থানীয়ভাবে চলমান আমার উদাহরণ Postgres ডাটাবেসে রূপান্তর করার জন্য, আমি NMIG ব্যবহার করেছি, যা একটি Node.js-ভিত্তিক ডাটাবেস রূপান্তর ইউটিলিটি।


NMIG ইনস্টল করার পরে, আমি ডাটাবেস এন্ডপয়েন্ট তথ্য এবং শংসাপত্র সহ config.json ফাইল সেট আপ করেছি, এবং তারপর আমি দৌড়েছি:


 /path/to/nmig$ npm start


এরপরে, আমি নিম্নলিখিত কমান্ডটি ব্যবহার করে একটি ফাইলে ডেটা ব্যাক আপ করেছি:


 pg_dump -Fc --no-acl --no-owner -h localhost -U postgres example > example.dump


AWS-এ একটি স্বাক্ষরিত URL তৈরি করার ঝামেলার মধ্য দিয়ে যাওয়ার পরিবর্তে, Heroku-এ একটি নতুন তৈরি পোস্টগ্রেস উদাহরণে ব্যাকআপ আমদানি করতে আমি শুধু pgAdmin ক্লায়েন্ট ব্যবহার করেছি।


Postgres দৃষ্টান্ত চলমান এবং ডেটা বৈধ হওয়ার সাথে সাথে, আমি Render PaaS-এ একটি নতুন Postgres ডাটাবেস তৈরি করেছি । তারপর আমাকে যা করতে হয়েছিল তা হল নিম্নলিখিত কমান্ডটি জারি করা:


 pg_restore --verbose --no-acl --no-owner -d postgres://username:[email protected]/example example.dump


পথ বরাবর শেখা পাঠ

হেরোকু থেকে রেন্ডারে আমার রূপান্তরের দিকে ফিরে তাকালে, এখানে আমি কিছু পাঠ শিখেছি:


  • DST অফসেট অন্তর্ভুক্ত করার জন্য তারিখ/সময় মান আপডেট করার পোস্টগ্রেস ডাটাবেসের সাথে আমার একটি ছোট সমস্যা ছিল। এটি আমার আসল ডাটাবেস ডিজাইনের সাথে একটি সমস্যা হতে পারে তবে আমি এটি পাস করতে চেয়েছিলাম। আমার ক্ষেত্রে, প্রভাবিত কলামটি শুধুমাত্র তারিখের মানগুলির জন্য ব্যবহৃত হয়, যা আমার জন্য পরিবর্তিত হয়নি।


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


  • রেন্ডারের সাথে, আমার RabbitMQ পরিষেবাটিকে একটি ব্যক্তিগত পরিষেবা করা দরকার কারণ ওয়েব পরিষেবা বিকল্পটি প্রত্যাশিত পোর্টটি প্রকাশ করে না। যাইহোক, এই পদ্ধতির সাথে, আমি RabbitMQ অ্যাডমিন ইন্টারফেস অ্যাক্সেস করার ক্ষমতা হারিয়ে ফেলেছি, যেহেতু ব্যক্তিগত পরিষেবাগুলি বাহ্যিকভাবে প্রকাশ করা হয় না। দেখে মনে হচ্ছে রেন্ডার এই বৈশিষ্ট্যের অনুরোধটি সমাধান করার পরিকল্পনা করছে।


সব মিলিয়ে, রেন্ডারে মাইগ্রেট করার আমার সিদ্ধান্তকে প্রভাবিত করার জন্য এই ছোটখাটো বাধাগুলি যথেষ্ট গুরুত্বপূর্ণ ছিল না।

উপসংহার

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


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


"রেন্ডার বেশ স্পষ্টতই 'ফ্যাশনেবল' হওয়ার চেষ্টা করছে না। আমরা আশ্চর্যজনক এবং নির্ভরযোগ্য হওয়ার চেষ্টা করছি।"


এডের প্রতিক্রিয়া আমার সাথে গভীরভাবে অনুরণিত হয়েছিল এবং আমাকে এমন একটি সময়ের কথা মনে করিয়ে দেয় যখন আমার প্রাক্তন সহকর্মী আমাকে বলেছিলেন যে আমার কোডটি তার কাছে "বিরক্ত" হিসাবে এসেছিল। তার মন্তব্য আমি পেতে পারে সর্বশ্রেষ্ঠ প্রশংসা হতে পরিণত. আপনি এখানে আরো পড়তে পারেন.


প্রযুক্তির যেকোনো দিক থেকে, কোন প্রদানকারীকে নির্বাচন করতে হবে তার সিদ্ধান্ত সর্বদা আপনার প্রযুক্তির অবস্থানের সাথে মেলে। আপনি যদি নিশ্চিত না হন, গার্টনার হাইপ চক্র একটি দুর্দান্ত রেফারেন্স পয়েন্ট, এবং আপনি এখানে তাদের পরিষেবার সদস্যতা নিয়ে শুরু করতে পারেন।


আমি নিম্নলিখিত মিশনের বিবৃতিতে ফোকাস করেছি, যা আমি মনে করি যে কোনও আইটি পেশাদারের জন্য প্রয়োগ করতে পারেন:


“আপনার বৌদ্ধিক সম্পত্তির মূল্যকে প্রসারিত করে এমন বৈশিষ্ট্য/কার্যকারিতা প্রদানের উপর আপনার সময়কে ফোকাস করুন। অন্য সবকিছুর জন্য ফ্রেমওয়ার্ক, পণ্য এবং পরিষেবার সুবিধা নিন।"


- জে. ভেস্টার


যখন আমি রেন্ডার PaaS ইকোসিস্টেমের দিকে তাকাই, তখন আমি একটি সমাধান দেখতে পাই যা আমার হাইপ সাইকেল পছন্দের মধ্যে থাকার সময় আমার মিশন স্টেটমেন্ট মেনে চলে।


যা জিনিসগুলিকে আরও ভাল করে তোলে তা হল যে আমি সম্পূর্ণরূপে আমার ব্যক্তিগত পকেটের বাইরের খরচে 44% সঞ্চয় দেখতে আশা করি - এমনকি আরও বেশি কারণ আমার পরিষেবাগুলিকে উল্লম্বভাবে স্কেল করতে হবে।


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


এই সিরিজের দ্বিতীয় পর্বটি উত্তেজনাপূর্ণ হবে। আমি প্রদর্শন করব কিভাবে Angular এ লেখা আমার স্ট্যাটিক ক্লায়েন্টের জন্য অর্থপ্রদান করা থেকে দূরে সরে যেতে হবে এবং Vue বা Svelte ব্যবহার করে রেন্ডারের বিনামূল্যের স্ট্যাটিক সাইট পরিষেবার সুবিধা নিতে হবে। আমি কোন কাঠামো বেছে নেব... এবং কেন?


একটি সত্যিই মহান দিন আছে!