Como ingeniero de software junior, ¿cuáles son las cosas que debo tener en cuenta cuando estoy construyendo un nuevo proyecto, de modo que pueda escalar?

Escala horizontal
Suponga que desarrolla un servicio HTTP. Desea ejecutar el servicio en N máquinas y distribuir sus solicitudes entrantes entre ellas. Pones tus máquinas N detrás de un equilibrador de carga para lograr esto. Esto se llama escala horizontal o escala lineal, ya que cada nodo continuará admitiendo M solicitudes por segundo, sin importar cuántas máquinas agregue al clúster, en teoría. La escala vertical se refiere a hacer que una sola computadora funcione mejor.

Diseño de aplicación sin estado
Diseño para escalar solicitudes horizontalmente . Supongamos que diseñaste un carrito de compras. Un usuario puede agregar un artículo a su carrito antes de comprar. ¿Dónde guardas ese estado? Puede mantenerlo en la memoria en su servicio, pero luego debe garantizar que las solicitudes de un solo usuario vayan a la misma máquina. Ese es un mal diseño. Se come tu RAM, perdiendo escala vertical. ¿Qué pasa si la máquina falla? Almacene el carrito en una base de datos, dejando que la base de datos maneje la consistencia, disponibilidad, etc. Esos son problemas difíciles que ya están resueltos. Eso permite que las solicitudes de los usuarios golpeen cualquiera de las N máquinas en su clúster en cualquier momento, incluso si mueren. El diseño de la aplicación sin estado se refiere al nivel medio (servicio) de su aplicación, no a la base de datos en sí.

E / S asincrónica
Comprender el problema de C10k: el problema de C10K. Obtenga información acerca de las E / S asíncronas y qué contenedores lo admiten, por ejemplo, Node.js, Jetty 9, etc. Puede considerar esta escala vertical ya que se está utilizando más desde una computadora.

Pregunta fascinante Yo diría que las cosas más importantes son:

Construya un arnés de prueba sólido y confiable que cubra todo el comportamiento. Asegúrese de que esto se actualice cuando se agregue un nuevo código (el elemento de código no está cerrado a menos que tenga casos de prueba) y ejecútelo con la compilación diaria. Esto evita que se introduzcan errores profundos.

Busque objetos y funciones genéricos. Esto es difícil porque básicamente estoy diciendo “código bien”. Intente determinar el comportamiento común que se puede extraer a clases genéricas. Reduzca la especificidad de su código tanto como sea posible, esto permite agregar nuevos códigos y funcionalidades más fácilmente.

Vuelva a examinar la arquitectura general cuando escriba un código nuevo. No se limite a la nueva funcionalidad y ajústela hasta que encaje. Refactorice la base del código para que la nueva funcionalidad se ajuste correctamente.

More Interesting

¿Por qué algunos desarrolladores de software se llaman ingenieros de software?

¿Cuáles son algunos de los chistes interesantes relacionados con el desarrollo de software y las pruebas de software?

¿Deberían los desarrolladores tener derechos de administrador local en su estación de trabajo? ¿Existe una alternativa válida / productiva?

¿Los desarrolladores independientes suelen utilizar software de seguimiento de tiempo?

Me gustaría saber sobre trabajos de desarrollo de software en Lituania para un extranjero con una larga experiencia en C # que no habla lituano.

¿Cuáles son las tareas más desalentadoras como desarrollador de software?

¿Vale la pena trabajar en una startup como desarrollador de software?

¿Cómo es trabajar como desarrollador de software en Snapdeal?

¿Cuáles son las preocupaciones de los desarrolladores de software sobre la privacidad?

¿Los programadores de Unix (y todas sus variaciones) piensan que escriben código obtuso?

¿Qué puede esperar un nuevo desarrollador de software contratar en Epic Systems en su primer día en el campus?

Cómo pasar del trabajo de desarrollador de software a algo relacionado con marketing y publicidad

Como desarrollador senior de software, ¿cometiste errores de nivel junior?

Preguntas de la entrevista técnica: ¿Cómo diseñaría un sistema para almacenar el historial de búsqueda de sus usuarios?

¿Por qué empresas como Delhivery contratan desarrolladores de software de manera tan agresiva?