Feda /dev/ - No Javascript allowed

Normas
spoiler
Personas non gratas
Memes feda dev




JuAn4k4

Se viene challenge serio en el trabajo, reescribir nuestro socket gateway para soportar 2B concurrent connections mandando mínimo 1msg/s cada una. Fun!

2 respuestas
desu

#37711 y el challange cual es?

2 1 respuesta
JuAn4k4

#37712 >2B de mensajes por segundo para 1 solo cliente (de los que pagan me refiero). Pub/Sub a ese nivel no te lo da nadie. Google Pub/Sub si, si te quieres arruinar. Eso además de lo que ya tenemos ahora, pero con multi-cell que pongamos ya nos vale. Además hay que contar con meter más cosas de delivery guarantees, rate limiting (a ese nivel), observability, monitoring, security, ordering, etc. sin pagar un pastizal, ya que esto es solo para una parte de la app. Los 2B de concurrent connections son lo de menos.

1 4 respuestas
frekaice

#37713 Como se llega a ese nivel de procesamiento? Porque solo con 1M ya lo veo jodido aunque, las cosas como son, suena divertido de hacer.

_gideon

Estaba yo leyéndome bien cómo implementar Scrum, y me he dado cuenta de que en mi trabajo no marcamos ni un check. Hay sprints, un backlog, dailies y toda esa parafernalia, pero nada de implementar Scrum tal y como fue conceptuado.

¿En vuestros trabajos también os lo saltáis a la torera o soy el único?

3 respuestas
GaN2

#37715 Scrum en la gran mayoria de sitios ni esta bien implementado ni es scrum como tal, sigue siendo la misma metodologia de cascada de siempre disfrazada como scrum...

2
frekaice

#37715 Normalmente se toman los elementos que interesan y se adaptan a la empresa, a menos que tengas una persona dedicada a que se siga scrum

En la mía hacemos backlog, dailies (que es más bien un status report) y waterfall hasta el fin del mundo

Kaledros

100% Scrum es contraproducente, fight me.

3
eondev

#37715 y qué más da. En esas cosas siempre es mejor adaptar y ser fluido, no ser puristas

#37713 tengo genuina curiosidad de qué se debe hacer ahí. Es decir, al leer eso tú sabes más o menos por donde tirarías pero... Qué compone semejante sistema para soportar ese volumen y que funcione como debe?

Los servicios se multiplican para soportar tráfico? Se escala con el metal? Se utiliza software ya creado y se adapta o se desarrolla software de 0? Debe ser un equipo grande, quiero decir, un ingeniero no le da para trabajar por un lado lo relacionado con el tráfico en sí y a la vez también desarrollar lo que sea que se haga para hacer algo así.

Osea, si es cuestión de Billones, eso ya de primeras debe ser una burrada de cpus, tarjetas de red y ram, además de un desarrollo a muy bajo nivel para encolar o gestionar el tráfico.

En resumen, se asemeja en algo a una infraestructura tradicional de un servicio tradicional? Backend, bbdd, sharding, cachés, balanceadores etc.

Joder, que luego tiras tú haces un backend y necesitas tirar de mierdas de libs de github cuyo éxito se basa en tirar de threading/multiprocessing, replicar en memoria el mismo servicio y con unos numeros de tráfico órdenes de magnitud más bajos. Vamos, la típica de backend + visor + nginx. Y cualquier problema iteras sobre eso y añades más mierdas.

2 respuestas
wdaoajw

#37719 Pues todo a la vez, el codigo debe estar optimizadisimo. Debe escalar horizontalmente y vivir detrás de un network load balancer, y luego correr en hardware dedicado

1 respuesta
Slowbro

#37713 Pero hay algo más que puedas hacer que no sea implementar pub/sub con sockets a pelo e invocar chamanismos lvl 10 de select?

Joder, cada día estoy más fuera de todo.

eondev

#37720 hay algo ya hecho o adaptable a casos de uso como esos? (algun fw o sdk)

Kaledros

Veo que no soy el único que le estaría muy agradecido a Juan si nos hiciera un devblog o incluso un postmortem de esto.

1
PaCoX

Scrum máster es como ser notario, con que sepas una frase ya lo tienes.
Notario: yo fio
Scrumm: cómo lo llevas

Otra historia para controlar a los fperos

1
desu
#37713JuAn4k4:

Los 2B de concurrent connections son lo de menos.

Si ya te lo dije la ultima vez. Que eso no es ningun reto. Ya te conte que yo pique hace poco una gw para http...

1 segundo es una mierda... te diria que en FAANG estas cosas estaran sobre 100ms de latencia te lo podria preguntar... pero 100ms seria un reto. 1 segundo? por favor... yo creo que sin sacar un profiler me quedaria sobre los 200ms.

ademas, a ese nivel lo imortante son las colas, ya te lo dije tambien. esto es algo que te explican el primer dia: es mejor tener 200 ms de median y p99 de 250 y max de 300, que no tener 50ms de median, p99 de 100 y max de 200. como mas compacta la distribucion mas facil planificar la capacidad. de hecho esto es una metrica de google para bloquear merges.

a ojo creo que me haria una median de 200 con un p99 de 500. me pondria ese objetivo.

y los 2B si que te pueden importar para mantener las conexiones, porque para la cola es super importante estas cosas... pero si me dices que solo te importa tener 2B / s... pff muy manco tienes que ser.

https://beej.us/guide/bgnet/html/#intro

saca la capacidad por instancia y saca el coste de escalado... a ver si es rentable o no. haz una simulacion de que capacidad necesitarias y veras que 2B hoy en dia cualquier empresa lo paga...

1 respuesta
JuAn4k4

#37719 Pues generalmente así a groso modo: Multi-cellular/tenant, sharding de todo, priority queues, queues, full stateless y rezar que el pub/sub no crezca y si crece bajar a muy bajo nivel he implementar BGP (descentralizado) ya que tener un registry como hacen Netflix/Whatsapp no escala. Y hacer performance tunning a saco para no dejarte una pasta en máquinas, cachear en local, poner rate-limit local, y para el global ser muy permisivo con los más grandes (monitorizar y llamar la atención o limitar manualmente en vez de filtrar en real-time). Y poner máquinas tochas para reducir el overhead de La gestión de cada cluster en si. Y luego aprovechar que cada uno tiene diferentes requisitos de delivery guarantees, ordering, y demás para reducir el overhead cuando se pueda, o aumentar latencias en otras.

#37725 Pero si tenemos un p99 de 20ms que me estás contando. En e2e los tenemos en 50ms (sin salir de la red AWS y eso que el cliente y el que envía son mierdas hechas en node). Los 2B de conexiones se consiguen en 1 sola máquina (tocha) si estas conexiones no mandan mucho mensaje. Al final lo importante son los msg/s, y si no te lo crees es por que no sabes de que va esto. Además tienes que contar que hacer rate limiting de 2B/s en cluster pues no es sencillo, y eso sin contar que eso es el valor mínimo.

3 respuestas
Soltrac

Sabía perfectamente que iba a haber una respuesta de desu contando que él lo ha hecho mientras le hacen una mamada en 10 minutos y muchísimo mejor.

2 3 respuestas
Kaledros

#37727 Yo es que no entiendo por qué Juan no le contrata y se deja de líos, si con un post en un foro le ha solucionado el problema. ¡Y sin saber los requirements, como un pro de los buenos!

1 respuesta
JuAn4k4

#37728 El habla de un gw http, eso te lo montas con nginx en una tarde, ya que son stateless. En sockets hay dos diferencias muy grandes, una, la más difícil de resolver es el pub/sub y routing, y la otra es el tener una conexión establecida (no es stateless) - Con lo que ello repercute al re-desplegar, re-balancear etc. Porque una máquina con 2000 conexiones muy parlanchinas puede estar sufriendo y otra con 1M andar sin despeinarse, y que de ese 1M de repente 5K se pongan en marcha.

1 2 respuestas
PiradoIV

Madre mía, la cantidad de YAML que debe de haber detrás de tanto buzzword xD

1 1 respuesta
desu

#37727 xq ya le dije que justo pique una HTTP. Y me parecía interesantes ver diferencias.

Dicho esto no tiene 2B a 1s. Si ahora dice que escriben cada 20ms. Las conexiones dan igual, lo importante es rate de los request. Tiene 100B a 1s.

Que es aún más grande el número.

Ahora si el sla es 1s. Lo que le he dicho sigue aplicando... Difícil liarla, cuestión de meter dinero a algo que funcione y cortar gasto en el futuro... Y me parece difícil liarla mucho.

A ver que dice de ALB, eso sí es jodido.

#37726 si tienes 20ms es xq no dejan aws te iba a decir, xq sino ya mínimo serían 50ms. Yo te decía latencia e2e. Podéis usar ALB de entry point? yo tengo ALB y mi gw detrás.

2b casi te entran en un MacBook de hehxo, pase una vez un tío que se abrió cientos de millones de socket en su pc y tiro benchmarks de req / s XD ahí depende de las garantías de delivery y seguridad.

De lo que dices nse como hacer el stateless para mantener las conexiones calientes.. Xq eso es súper importante. O te entendí mal y te refieres a lo típico mandar los mensajes e instancias? Que es full stateless?

Lo de priority, routing, sharding y demás, a nivel de protocolo y gestionando los pools es súper fácil. Imo más fácil que en HTTP XD a la escala que yo lo he picado claro m. El problema que yo he visto es que la gente lo hace sobre HTTP en lugar de tcp.. Estáis diseñando vuestro propio protocolo para ello o usáis algo ya existente? Me molaría diseñar un protocolo ahí. Además en stream donde de un socket lees unos bytes y de ahí dispatch a otro que ya tienes ready.

Para el ratelimiting que vais a usar?

Como de homogeno son los paquetes. Me dices 20ms, eso es que no hay mucho que transigir. Me puedes dexie los bytes y el tiempo de write?? O tienes un profile de una escritura?? O flsmegraph.

Vais a usar a mano cosas nuevas de Linux a nivel de sys call? En que lenguaje y xq es rust?

Como funciona el discovery al enrutar internamente?? Xq full stateless tu me dirás, propagando? Eso no escala vs estado y sufrir inconsistencias eventuales... Xq hoy en día usamos raft + kv por algo. No veo quitar la. Kv

1 respuesta
pineda

#37727 Hugh Jackman en Swordfish literal

1 respuesta
B

#37732 Yo me lo imagino más como "rata"

*** Solo los de latam suben cortes de peliculas o que?

1
desu

primero dice que tiene 2B, mandando 2B msg/s

#37711JuAn4k4:

soportar 2B concurrent connections mandando mínimo 1msg/s cada una

luego dice lo que le he dicho:

#37726JuAn4k4:

Al final lo importante son los msg/s

+

#37726JuAn4k4:

Pero si tenemos un p99 de 20ms que me estás contando

pues not ienes 2B/s, tendras 100B/s... no?

#37726JuAn4k4:

y si no te lo crees es por que no sabes de que va esto

le dice al que ha picado una GW, no dice tonterias y hace poco paso un tio moviendo millones en un pc de mierda.

#37726JuAn4k4:

Además tienes que contar que hacer rate limiting de 2B/s en cluster pues no es sencillo

vuelve a decir 2B/s. no me queda claro, no eran 100B/s?

#37729JuAn4k4:

establecida (no es stateless)

luego dice que la co nexion no es stateless

pero en el mensaje anterior dijo esto:

#37726JuAn4k4:

full stateless

Entiendo que se ha equivocado porque yo se de lo que hablo y entiendo a que se refiere. Pero a los fperos os tiene bailando. HAHAHA. Por eso le pregunto por ese state a ver que nos cuenta el juanaka.

En fin yo le veo preparado para dar una talk, a los fperos como vosotros ya les tiene bailando y eso que no ha dicho nada coherente ni ha explicado nada que no sepa un ni;o de 12 a;os que ha escrito su primer cliente - servidor en python o c en la practica de informatica del instituto...

De aqui saca un liibro, Clean Gate Ways y ya se hace millo.

1 respuesta
Kaledros
#37731desu:

Xq full stateless tu me dirás, propagando? Eso no escala vs estado y sufrir inconsistencias eventuales... Xq hoy en día usamos raft + kv por algo. No veo quitar la. Kv

Creo que le está dando un jari.

desu

#37730 el cabron lleva 2 tochos y no ha dicho nada.

pero bueno, entiendo que el challenge no es tecnologico, el challenge es de ingenieria.

lo dificil ahi es montar todo eso con restricciones de tiempo... xq eso lo monta un mono fpero.

mucha complejidad (features) pero poca dificultad.

pero bueno, cuando aprenda a calcular el rate de mensajes / segundo y los porcentiles bien lo mismo nos enteramos de que tiene que hacer. xq si vas de 2B a 100B / segundo, de donde sacas el p99 de 20ms? el cabron calculando porcentiles sobre distribuciones que se saca de la manga o que? HAHAHA

1 respuesta
JuAn4k4

#37736 El rate es ese 2B de mensajes por segundo. Para el rate limit tenemos 3 soluciones internas mal hechas, usaremos leaking bucket en local, y para El cluster seguramente alguna en cluster pero para menores niveles ya que no aguantan 2B por segundo ni de fly.
Tenemos ALB si, los NLB fallan mucho, tenemos uno en la versión antigua, en la nueva Irán varios con self healing, ya que necesitamos llegar a 99.999% SLA =). Otro challenge, que el ALB te da 99.99% creo recordar, y fallan más de eso. Los NLB aún fallan más.

Contra más stateless hagas los servicios y no tengas nada centralizado, mejor escala. El problema de escalar es la centralización de algo y los estados compartidos.

Cuánto yaml, si, la mayoría horrorform por desgracia.

1 respuesta
S

Alguien mas piensa que desu esta para que le encierren? Algo así como el don quijote de la informática, se ha vuelto loco de leer cosas de ingeniería.

1 1 respuesta
PaCoX

como vas a encerrar a semejante Crack, máquina, fiera, tifón, mastodonte, ídolo, mamut, ganador, mole, viga, figura, champion, referente, artista, elemento, maestro, animal, socio, tiburón, tigre, bestia, titán, gigante, coloso, campeón, ciclón, caimán, ninja, velociraptor.

4
JuAn4k4

#37734 Vamos a contestar uno a uno:

2B (billones) de conexiones enviando 1 msg cada segundo cada una son 2B de mensajes por segundo. No 100B/s.

Tu has dicho que lo importante es la latencia y el número de conexiones, yo te digo que son los mensajes por segundo.

El p99 de latencia son 20ms por mensaje, en un solo thread en serie serían 50msg/s, pero no se hacen en serie ni en un solo thread. Mandame las cuentas de cómo te salen 100B/s a 20ms por mensaje que no las entiendo. Nuestra app de ahora (heredada y que queremos re-hacer) soporta 2K/2.5K mensajes por segundo con esas latencias, y es una puñetera mierda. Y tu aspirabas a 200ms, no entendí muy bien de qué

Nunca dije 100B/s, eso te lo has inventado tu.

Full Stateless donde se pueda, partes en trozos y haces todos stateless, y el edge, que se conecta, lo minimizas, y soportas el hecho de que la persona se cambie de sitio.

La coherencia falla en tu comprensión, porque creo que no has entendido nada de lo que digo, no se si has llegado a entender si quiera que la B es de billón.

Edit: He releido, y has dicho que la latencia es de escribir mensaje, :man_shrugging: Se escribe un mensaje cada 0.0000000005ms
No hay SLA de 1s, eso te lo has inventado, yo creo porque no has entendido mucho el problema.

2 respuestas