@iamemhn

EM Hernández-Novich

si cada usuario que se conecta a PostgreSQL, representa una conexion, es prudente aumentar el max connection limite a mas de 100? (En caso que sea cierto y se estime que habran mas de 100 usuarios), gracias

Ajústalo a la cantidad de conexiones necesarias. Al mismo tiempo, ajusta el kernel para permitir ese número alto de conexiones.
Cada conexión requiere recursos en el sistema operativo, tanto en la tabla de archivo abiertos, semáforos, descriptores de memoria compartida, y otras cosas. Para poder aumentar la cantidad de conexiones simultáneas, tienes que estar seguro que el sistema operativo también está ajustado. Cambiar 100 por 256 no es gran cosa, pero si necesitas 1024 o más conexiones, presta atención a la cantidad de memoria por proceso: el ejecutable y sus datos locales, más los espacios de trabajo que PostgreSQL reserva *por* conexión. Todas están explicadas en la documentación de PostgreSQL.
Para soportar miles de conexiones, necesitas unos cuantos Gb de RAM, y requiere ajustar el kernel Linux. Como mínimo
kernel.shmmax
kernel.shmmall
kernel.sem
que haya suficiente espacio en segmentos de memoria compartida y semáforos para manejar la concurrencia. Si tienes más de 32Gb de RAM, también tienes que ajustar cosas como
vm.dirty_background_ratio
vm.dirty_ratio
de lo contrario generarás más I/O del necesario.
Después puedes considerar usar cosas como pg_bouncer o pg_pool, cuando tienes *varias* conexiones del mismo usuario (para que se compartan sobre una sola) o si tienes conexiones que viven poco (para que no haya que reconectar el backend a cada rato). Esto puede ayudarte a reducir la cantidad de conexiones totales y minimizar las reconexiones, que son sumamente caras.

Latest answers from EM Hernández-Novich

Por que no debería copiar códigos de internet?

Voy a suponer que necesitas un pedazo de código que «resuelva el problema X», usas tu buscador de confianza, y descargas el fragmento más «popular» que encontraste. Dá lo mismo si el pedazo de código es para un lenguaje de programación que crees dominar a fondo, o de un lenguaje nuevo para ti.
Si no se te ocurrió cómo escribir la solución al problema por ti mismo, lo más probable es que todavía no tengas comprensión completa del problema, y por eso no lo puedes atacar. Por extensión, cualquier pedazo de código que encuentres que es popular porque presuntamente resuelve el problema, para ti seguirá siendo inescrutable prima facie.
Si no entiendes cómo hace lo que hace, es posible que haga más cosas de las que necesitas, o que haga mal lo que necesitas en determinadas condiciones (que, por Murphy, son las tuyas). Mientras más complejo es el fragmento de códico que copias, aún mayor el riesgo.
Entonces, está bien que busques ejemplos de código que te permitan comprender mejor el problema que estás tratando de resolver. Sin embargo, es un riesgo usarlo sin comprenderlo. Mucha gente lo hace porque quiere «resolver» y no presta mayor cuidado a las consecuencias para con su propio equipo de trabajo, ni para con sus usuarios. Es una cuestión de ética.
Es preferible que estudies el fragmento hasta entenderlo, y luego lo expreses usando tu propio estilo de programación. Eso es evidencia que entendiste lo suficiente del problema, como para expresar esa solución. No hay nada de malo en imitar una solución ajena después de comprenderla; después de todo, eso es lo que uno hace cuando lee, imagina, y manifiesta su propia creatividad.
En relación a copiar librerías o aplicaciones posiblemente consolidadas, y con una historia evidente de integridad y éxito, asegúrate que sean Software Libre, copia, usa, aprende, y redistribuye.

View more

Como aprendo a programar BIEN? no me importa el tiempo que tome solo quiero programar bien sin ir a la universidad.

Programar es ser capaz de expresar la solución a un problema, de manera que se aproveche efectivamente el lenguaje de programación empleado y, quizás mucho más importante, otra persona pueda entender lo que estás tratando de hacer. Esa persona muchas veces eres tú en el futuro.
Para eso, tienes que tener dominio del idioma en el cual recibes la definición de los problemas. Sea español, inglés, o cualquier otro idioma. Porque si no eres capaz de comprender la especificación, y hacer las preguntas adecuadas, tu programa no será una solucion completa. Para dominar un idioma, tienes que leer y escribir, con buen vocabulario, mejor gramática, y efectivamente. Nuestra inteligencia está limitada por los conceptos abstractos que podemos imaginar, y la capacidad de convertirlos en una historia. Lee y escribe, de todo. Escuchar historias acompañadas de imágenes explícitas no es lo mismo que leer una historia y construir imágenes mentales. Saber contar una historia es la destreza fundamental que demuestra la inteligencia.
La única forma de saber que se domina un tema, es ser capaz de explicárselo a cualquier persona, con cualquier nivel de preparación, y lograr que haya aprendizaje proporcional. Escoge el tema que te interesa, estúdialo, y trata de explicarlo a otra persona: repite hasta que la otra persona entienda. Haces eso con los temas que te interesen, y te irá bien.
Si bien vas a comenzar por aprender algún lenguaje de programación, probablemente el «popular» en tu entorno o sugerido por otros, o «el futuro del desarrollo» (ja ja ja) es importante que aprendas varios lenguajes de programación. Con diferentes estilos de programación: imperativo, declarativo lógico, declarativo funcional, reactivo. Eso mejora tu manera de enfrentar los problemas, de la misma forma que tener mejor vocabulario te permite expresar ideas complejas de forma sucinta.
Para que tus programas sean mejores, tienes que estudiar la técnica. Eso se logra estudiando y practicando estructuras de datos, algoritmos, y cualesquiera conceptos en el área de interés, por ejemplo, programación paralela y concurrente. Muchas veces, la mejor solución para un problema no es obvia, pero alguien ya la encontró y está en un libro. Es más importante saber cuál libro, que improvisar.
Así, programar es escribir un discurso en algún lenguaje de programación. Con el paso del tiempo, encontrarás formas que son subjetivamente mejores que otras, según tus capacidades, y métodos que son objetivamente mejores que otros, según su base técnica. La manera de abandonar lo subjetivo por lo objetivo es tener experiencia, y eso sólo se logra invirtiendo tiempo: leer mucho, equivocarse mucho, aprender cosas difíciles porque terminan siendo mucho mejores que las fáciles, y no teniendo miedo a huir de la comodidad de las chuletas.
Si estás buscando una receta corta para programar bien, me temo que después de casi 40 años programando, no la conozco. Escribe programas, lee e insiste -- es divertido.

View more

Para aprender sobre programación sobre el kernel de linux que libros y documentación recomedaría?

Hace muchos años que no hago nada de eso.
Cuando lo hice, leí «Understanding the Linux Kernel» y «Linux Kernel Programming», ambos publicados por O'Reilly. Al menos el segundo libro lo mantienen al día, así que si lo encuentras reciente, tendrá la información sobre el kernel LTS conveniente.

Digamos que tengo una función add_comment en PostgreSQL que recibe 2 parámetros: articleId y comment, es necesario o prudente, hacer una consulta de articleId en articles_table dentro de la función para asegurar que la fila con el articleId exista? Gracias

Pareciera que tienes una tabla para comentarios que tiene una clave foránea para artículos. Es una relación maestro-detalle típica. No parece necesario, ni prudente.
Si la tabla comentarios tiene un CONSTRAINT FOREIGN KEY haciendo referencia a la clave primaria en tabla artículos, el INSERT sólo va a tener éxito si el artículo ya existe en la tabla. Más aún, si intentas asociar un comentario a un artículo que no existe, vas a recibir una excepción indicando el identificador de artículo inexistente.
Si no es así, agrégalo. Los CONSTRAINTS existen para que no tengas que hacerte éstas preguntas.

¿instalar un firmware -distinto al original- en un router es una necesidad o solo un plus? ¿bajo qué criterios? ¿usas varios distinto acorde a requerimientos?

Para mi es una necesidad, considerando el tipo de control que quiero tener sobre la red. La mayoría de los firmwares «de caja» suelen tener limitaciones impuestas por las regulaciones de la FCC en USA, sin contar deficiencias de seguridad o desempeño que no habían sido detectadas cuando se ensambló el equipo.
En el caso de las regulaciones, lo habitual es que la potencia de transmisión este limitada artificialmente. Con un firmware abierto, puedo subir la potencia de transmisión al máximo, con lo que la señal llega bastante más lejos.
En el caso de las deficiencias, los vendedores de AP apuntan al usuario que sabe poco y nada de redes, y sólo quiere «WiFi y compartir internet». Por ejemplo, no tienen caching DNS (desperdicio de tráfico), no tienen (buenos) mecanismos para QoS, o tienen mecanismos precarios para VPN o S/D-NAT.
Cuando compro, o recomiendo comprar, un AP, lo primero que verifico es si puede correr OpenWRT. Si no puede, no lo compro. Si puede, lo primero que hago es instalar OpenWRT porque incluye las capacidades adicionales para VPN, caching-DNS, mejor manejo de filtrado y control de tráfico. usar el USB para ser servidor de archivos/medios...

View more

Es correcto decir dispositivos "empotrados" o "embebidos"?

La traducción directa al español neutro del inglés «embedded» sería «integrado» o «incorporado»; son las que prefiero. Las traducciones «empotrado» y «embebido», también son correctas. Es cuestión de decidir cuán sofisticado quieres presentarte ante la audiencia.
También serían correctas «incrustado» y «encastrado», que he utilizado Porque Puedo®, cuando el interlocutor es de aquellos que usan «colocar» cuando es suficiente «poner».

¿Es posible montar tu propio mail server corporativo (es decir, para que los empleados tengan email con el dominio de la empresa) en un VPS con linux (por ejemplo: con Digital Ocean)?, ¿o es necesario contratar ese servicio aparte?. ¿Que buenas prácticas recomiendas para montar tal cosa?

Es posible, tanto en un CoLo, como en virtuales de DigitalOcean o AWS, según el gusto y presupuesto. También puedes entregarle todos tus mensajes de correo e información a Google o Microsoft para que lo administre en sus plataformas. Las herramientas de gestión son muy bonitas y si no sabes, ni te interesa, como funciona el flujo de correo, es una linda experiencia a cambio de la privacidad de tus mensajes.
Tienes que configurar toda la maquinaria de transporte de correo, certificación de origen, certificación de contenido, control de contenido, buzones, y posiblemente un webmail. sin olvidar completa y correcta configuración de DNS, con DNSSEC para maximizar la credibilidad en el envío. Además, tienes interactuar con el proveedor de hospedaje para que autorizen el flujo de correo: generalmente los proveedores de hospedaje bloquean SMTP para evitar spammers, y querrán asegurarse que tu despliegue va a ser usado con responsabilidad.
La mejor práctica que puedo recomendarte es contratarme el servicio.

View more

Language: English