<p>I’m proposing a project to my school supervisor, which is to improve our current server to be more fault tolerant, easily scaling and able to handle high traffic.
I have a plan to build a distributed system starting from deploying our server to different PCs and implement caching and load balancing, etc.
But I want to know whether Kubernetes already can satisfy my objective？ what are the tradeoff between using Kubernetes and building own distributed system to deploy applications？</p>
<p>Our applications are built with Django and most are likely used by students such course planner or search/recommend systems.</p>

NYL
<blockquote>
<p>I’m proposing a project to my school supervisor, which is to improve our current server to be more fault tolerant, easily scaling and able to handle high traffic.</p>
</blockquote>
<p>This is a great idea. What you really want to do here is to use as many existing tools as you can, to let you <strong>focus</strong> on improving the <em>core functionality</em> of your <strong>current server</strong> - e.g. serving your users with your business logic and data and increase availability of this.</p>
<p>Focusing on your <em>core functionality</em> means that you should NOT do, e.g.</p>
<ul>
<li>NOT write your own memory allocation algorithm or garbage collection</li>
<li>NOT write you own operating system</li>
<li>NOT write your own container scheduler (e.g. what Kubernetes can do for you)</li>
</ul>
<blockquote>
<p>I have a plan to build a distributed system starting from deploying our server to different PCs and implement caching and load balancing</p>
</blockquote>
<p>Most applications deployed on Kubernetes or that have your <em>availability</em> requirements actually <em>should be a <strong>distributed system</strong></em> - e.g. be composed of more than one instance, designed for elasticity and resiliency.</p>
<blockquote>
<p>what are the tradeoff between using Kubernetes and building own distributed system to deploy applications?</p>
</blockquote>
<p>Kubernetes is a tool, almost an distributed operating system that e.g. schedules containerized apps to a server farm. It is a tool that can help you a lot when developing and designing your distribued application that should follow the <a href="https://12factor.net/" rel="nofollow noreferrer">Twelve Factor principles</a>.</p>
